??????????У???????????Щ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????в?????????????????????C++??????ж?????????????????????Ч????????Σ????

??????????????????

class MyClass
{
    public:
        MyClass(int *p??int i): ptr(p)??value(i) { }
        ~MyClass() { delete ptr; }
        int get_share_value() { return *ptr; }
        int get_value() { return value; }
        void set_share_value(int i) { *ptr = i; }
        void set_value(int i) { value = i; }
    private:
        int *ptr;
        int value;
};

int main()
{int *p  = new int(10);
    MyClass test(p??20);
    MyClass test2(test);
    test.get_share_value();//return 10
    test2.get_share_value();//return 10
  
    test2.set_share_value(110);
    test.get_share_value();//return 110
  
    test.set_share_value(120);
    test2.get_share_value();//return 120
  
    return 0;
}

?????????????????????????乲????????????????δ???????????????????????????????????????????????????????test??test2??????????????????????????delete ptr???????delete????val???????delete????????????????????Ч??????????????????

????????????????delete?????????????????????????????????????????ν?????????????????????ü?????????????????????????????????????????????????????o????????????????????

???????????£?

#include <iostream>

using namespace std;

class MyClass;

class Use_Ptr
{
    friend class MyClass;
    int *ptr;
    size_t use;
    Use_Ptr(int *p): ptr(p)?? use(1) { }
    ~Use_Ptr() { delete ptr; }
};

class MyClass
{
    public:
        MyClass(int *p??int i): ptr(new Use_Ptr(p))?? value(i) { }

        //???????????????????????
        MyClass(const MyClass &mc): ptr(mc.ptr)?? value(mc.value) { ++ptr->use; }
        ~MyClass() { if(--ptr->use == 0) delete ptr; }//??????????????ü??????????????????????

        MyClass& operator=(const MyClass&);
        int get_share_value() { return *ptr->ptr; }
        int get_value() { return value; }
        void set_share_value(int i) { *ptr->ptr = i; }
        void set_value(int i) { value = i; }
    private:
        Use_Ptr *ptr;
        int value;
};

MyClass& MyClass::operator=(const MyClass &mc)
{
    ++mc.ptr->use;//???use?????sm.ptr->use????????????????
    if(--ptr->use == 0)
      delete ptr;
    ptr = mc.ptr;

    return *this;
}


int main()
{
    int *p = new int(10);

    MyClass test(p??20);
    MyClass copy(test);
    return 0;
}