Halo
发布于 2022-06-10 / 116 阅读 / 0 评论 / 0 点赞

常见智能指针

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


评论