int num =myPtr->age; shared_ptr<Arwen> ptrOne( myPtr); //复制构造 num =myPtr->age; //如果是auto_ptr该处会出错.因为把myPtr复制给ptrOne后,它自己本身相当于失效了 num = ptrOne->age; shared_ptr<Arwen> ptrTwo = ptrOne; num = ptrOne->age;//如果是auto_ptr该处也会出错,此时ptrOne也...
模拟实现简单计数的智能指针的实现
一、auto_ptr 最开始auto_ptr的成员变量主要有T* _ptr,bool _owner,主要实现原理是在构造对象时赋予其管理空间的所有权,在析构函数中通过_owner的真否来释放所有权,并且在拷贝或赋值后通过将_owner设为false,转移空间的所有权。具体实现代码如下: template<typenameT>classAutoPtr{public:AutoPtr(T*ptr=NULL);A...
auto ps= son.lock();if(ps) {//原理: 类中存在weak_ptr指针,通过一系列方式转换成 shared_ptr,然后传参handleChildAndParent(shared_from_this(), ps);//使用CRTP来使用 本对象的指针 ★★★} cout<<"after call checkRelation\n"; } };voidtestParentAndChild() { ParentPtr p(newParent()); Chi...
下面我们来瞧瞧shared_ptr具体是咋实现的.相较auto_ptr有下面几个不同的地方: 1.引进了一个计数器shared_count,用来表示当前有多少个智能指针对象共享指针指向的内存块 2.析构函数中不是直接释放指针对应的内存块,如果shared_count大于1则不释放内存只是将引用计数减1,只是计数等于1时释放内存 ...
下面我们来瞧瞧shared_ptr具体是咋实现的.相较auto_ptr有下面几个不同的地方: 1.引进了一个计数器shared_count,用来表示当前有多少个智能指针对象共享指针指向的内存块 2.析构函数中不是直接释放指针对应的内存块,如果shared_count大于1则不释放内存只是将引用计数减1,只是计数等于1时释放内存 ...