C++??????????????????????????????
???????????? ???????[ 2013/3/20 10:21:13 ] ????????
??????????У???????????Щ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????в?????????????????????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;
}
??????
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11