// auto_ptr_release.cpp // compile with: /EHsc #include <memory> #include <iostream> #include <vector> using namespace std; class Int { public: Int( int i ) { x = i; cout << "Constructing " << ( void* )this << " Value: " << x << endl; }; ~Int( ) { cout << "...
建議版本 解除警示 auto_ptr Class auto_ptr Members auto_ptr Typedefs auto_ptr Member Functions auto_ptr Member Functions auto_ptr::auto_ptr auto_ptr::get auto_ptr::release auto_ptr::reset auto_ptr Operators Learn Previous Versions Visual Studio ...
returnauto_ptr<Y>(release()); } }; 1 构造函数与析构函数 auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性: 1 2 int*p=new int(0); auto_ptr<int> ap(p); 从此我们不必关心应该何时释放p,也不用担心发生异常会有内存泄漏。 这...
ptr = __a.release();} return *this;} template auto_ptr& operator=(auto_ptr& __a)throw(){ if (__a.get() != this->get()){ delete ptr;ptr = __a.release();} return *this;} ~auto_ptr() throw() { delete ptr; } T& operator*() const throw() { return *ptr; } T* ...
autb_ptr(auto_ptr&_Right)noexcept:_Myptr(_ Right.release()){} 可以看到,auto_ptr调用了release方法,那么release方法又干了什么呢? _Ty*rerlease()noexcept{_Ty*_Tmp=_Myptr;_Myptr=nullptr;return(_Tmp);} 原来是ptr1把自己的资源给ptr2了然后把自己置为空,对空指针解引用当然会报错了。
可以通过成员函数use_count()来查看资源的所有者个数。除了可以通过new来构造,还可以通过传入auto_ptr, unique_ptr,weak_ptr来构造。当我们调用release()时,当前指针会释放资源所有权,计数减一。当计数等于0时,资源会被释放。 shared_ptr 是为了解决 auto_ptr 在对象所有权上的局限性(auto_ptr 是独占的), 在...
2) release用来转移所有权 3) reset,用来接收所有权,如果接收所有权的auto_ptr如果已经拥有某对象, 必须先释放该对象。 可见,auto_ptr短短百来行的代码,还是包含了不少"玄机"的。
3) release() 返回auto_ptr指向的那个对象的内存地址,并释放对这个对象的所有权。 用此函数初始化auto_ptr时可以避免两个auto_ptr对象拥有同一个对象的情况(与get函数相比)。 例子如下: auto_ptr< string > pstr_auto( new string( "Brontosaurus" ) ); ...
从上面的例子来看,auto_ptr的使用很简单,通过构造函数拥有一个动态分配对象的所有权,然后就可以被当作对象指针来使用,当auto_ptr对象被销毁的时候,它也会自动销毁自己拥有所有权的对象(嗯,标准的RAAI做法),release可以用来手动放弃所有权,reset可用于手动销毁内部对象。