虽然不能拷贝或赋值unique_ptr,但可以通过调用release()/reset()函数将指针的所有权转移给另一个unique_ptr。 4.shared_ptr智能指针 常用的成员函数: get():返回指向变量的原始指针。 reset():重置智能指针,使它所持有的资源为空。 swap():交换两个智能指针所管理的资源。 use_count():返回智能指针所指向变量...
reset()释放并销毁原生指针。如果参数为一个新指针,将管理这个新指针 shared_ptr unique_ptr不能多个指针指向同一个资源,而shared_ptr可以。 实现原理: 每次复制或者多一个共享内存资源的shared_ptr时,计数+1; 每次释放shared_ptr时,计数-1; 当shared_ptr计数为0时,证明所有指向同一资源的shared_ptr都全部释放了...
重置智能指针指向,意思就是不指向当前对象,指向另外一个对象。 voidreset(_Ty* p=nullptr) { if(_Owns) { delete_Ptr; } _Ptr=p; } 释放即失去当前对象的拥有权,可以利用返回值方式让其他指针指向当前对象。 _Ty*release()const { _Ty* tmp =nullptr; if(_Owns) { ((my_auto_ptr*)this)->_Owns ...
智能指针有一个通用的规则,就是表示用于调用指针原有的方法,而则表示调用智能指针本身的方法。 本身拥有的方法主要包括: 1、get() 获取其保存的原生指针,尽量不要使用 2、bool() 判断是否拥有指针 3、release() 释放所管理指针的所有权,返回原生指针。但并不销毁原生指针。 4、reset() 释放并销毁原生指针。如果...
建议– 无论何时,在对unique_ptr使用Release()方法后,记得一定要删除对应的裸指针。如果你是想要删掉unique_ptr指向的对象,可以使用unique_ptr.reset()方法。 错误#10:在调用weak_ptr.lock()的时候没检查它的有效性! 在使用weak_ptr之前,你需要调用lock()方法来获取这个weak_ptr。lock()方法的本质是把这个weak...
与引用计数型智能指针不同的,auto_ptr要求其对“裸”指针的完全占有性。也就是说一个”裸“指针不能同时被两个以上的auto_ptr所拥有。那么,在拷贝构造或赋值操作时,我们必须作特殊的处理来保证这个特性。auto_ptr的做法是“所有权转移”,即拷贝或赋值的源对象将失去对“裸”指针的所有权,所以,与一般拷贝构造函...
如上面的代码:智能指针可以像类的原始指针一样访问类的public成员,成员函数get()返回一个原始的指针,成员函数reset()重新绑定指向的对象,而原来的对象则会被释放。注意我们访问auto_ptr的成员函数时用的是“.”,访问指向对象的成员时用的是“->”。我们也可用声明一个空智能指针auto_ptr<Test>ptest(); ...
pi.reset(); pi2.reset();if(p.expired())cout<<"weak_ptr过期"<<endl; }//3. reset():将该弱引用指针设置为空,不影响该对象的强引用数量,但是指向该对象的弱引用会减少1voidfunc3(){autopi = make_shared<int>(100);autopi2(pi);
在使用基本指针类型时,因为要手动释放指针指向的内存,常常容易造成内存泄漏,特别是异常分支很多的情况下。而智能指针类型就是将基本指针类型封装成模板类,以便更好地管理内存。 智能指针都包含一个explicit构造函数,因此基本指针类型不能隐式转换成智能指针,需要显式
std::shared_ptr是通过指针保持对象共享所有权的智能指针。多个shared_ptr对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存: 最后剩下的占有对象的shared_ptr被销毁; 最后剩下的占有对象的shared_ptr被通过operator=或reset()赋值为另一指针。