shared_ptr
它有一个叫做共享所有权(sharedownership)的概念。shared_ptr的目标非常简单:多个指针可以同时指向一个对象,当最后一个shared_ptr离开作用域时,内存才会自动释放
class Test
{
public:
Test(int a = 0 ) : m_a(a)
{
}
~Test( )
{
cout<<"Calling destructor"<<endl;
}
public:
int m_a;
};
void main( )
{
shared_ptr<Test> sptr1( new Test[5],
[ ](Test* p) { delete[ ] p; } );
}
weak_ptr
weak_ptr可以共享shared_ptr持有的资源。所以可以从一个包含资源的shared_ptr创建weak_ptr。weak_ptr不支持普通指针包含的*,->操作。它并不包含资源所以也不允许程序员操作资源。
unique_ptr
unique_ptr提供了创建数组对象的特殊方法,当指针离开作用域时,调用delete[]代替delete。当把unique_ptr赋给另外一个对象时,资源的所有权就会被转移
如何选择
如果需要共享资源使用shared_ptr,如果独占使用资源就使用unique_ptr