成员函数reset()的功能是重置scoped_ptr:,它删除原来保存的指针,再保存新的指针值p。如果p是空指针,那么scoped_ptr将不持有任何指针。在一般情况下,reset()不应该被调用,因为它违背了scoped_ptr的本意——资源应该一直由scoped_ptr自动管理。 scoped_ptr用operator*()和operator->()重载了解引用操作符“*”和箭头...
成员函数reset的功能是重置scoped_ptr,它删除原来保存的指针,再保存新的指针值p,如果p是空指针,那么scopted_ptr将不能持有任何指针,一般情况下reset不应该配调用,因为它违背了scopted_ptr的本意---资源应该一直由scoped-ptr自己自动管理 实际上拥有权不可转移不够方便,swap成员函数可以交换两个scopted_ptr保存的原始...
namespaceboost {template<typenameT>classscoped_ptr: noncopyable {public:explicitscoped_ptr(T* p =0); ~scoped_ptr();voidreset(T* p =0); T&operator*()const; T*operator->()const;T*get()const;voidswap(scoped_ptr& b); };template<typenameT>voidswap(scoped_ptr<T> & a, scoped_ptr<T>...
~scoped_ptr()// never throws在其作用域结束时自动删除保存的指针对象,从而正确地回收资源 void reset(T * p = 0)// never throws删除原来保存的指针,再保存新的指针p,如果p是空指针,那scoped_ptr将不持有任何指针 { BOOST_ASSERT( p == 0 || p != px );// catch self-reset errors this_type(p...
//智能指针的创建 unique_ptr<int> u_i; //创建空智能指针 u_i.reset(new int(3)); //"绑定”动态对象 unique_ptr<int> u_i2(new int(4));//创建时指定动态对象 unique_ptr<T,D> u(d); //创建空unique_ptr,执行类型为T的对象,用类型为D的对象d来替代默认的删除器delete //所有权的变化 ...
}*///boost库中有一个更好的解决方案typedefscoped_ptr<T>this_type;voidreset(T*p=0){this_type(p).swap(*this);//无名临时对象技术}voidswap(scoped_ptr&b){T*tmp=b.px;b.px=px;px=tmp;}private://不想让其拥有哪些功能,声明为私有即可。scoped_ptr(constscoped_ptr<T>&);//声明为私有,外部...
对reset()函数的理解:this_type(p).swap(*this);模型如下: 通过新生成的无名临时变量,将新地址与旧地址交换,在最后脱离函数范围,对象消亡,调用析构函数,释放 原先空间,达到不内存泄漏,并且对新空间进行管理。 缺点:不能对数组空间进行管理。 关于如何理解Boost库中的scoped_ptr就分享到这里了,希望以上内容可以对...
p1.reset();//表示置空,显式的将引用计数-1,也可以不用,等程序结束的时候会进行的,因为是智能指针是栈对象嘛 cout << p2.use_count() << endl; p2.reset(); cout << "Exiting main ..." << endl; return 0; } 1. 2. 3. 4.
shared_ptr pointing to it is destroyed or reset. 先来看例程: 代码语言:cpp 代码运行次数:0 运行 AI代码解释 #include<boost/shared_ptr.hpp>#include<iostream>usingnamespacestd;classX{public:X(){cout<<"X ..."<<endl;}~X(){cout<<"~X ..."<<endl;}};intmain(void){cout<<"Entering main...
26//5.不能转移所管理的指针的所有权 27auto_ptr<string>ap(newstring("Test auto ptr")); 28scoped_ptr<string>sp2(ap); 29assert(ap.get()==0); 30ap.reset(newstring("new test")); 31cout<<*sp2<<endl<<*ap<<endl; 32 33return0; 34}...