指针

C++ 指针

智能指针

指针类别 支持 备注
unique_ptr C++ 11 拥有独有对象所有权语义的智能指针
shared_ptr C++ 11 拥有共享对象所有权语义的智能指针
weak_ptr C++ 11 到 std::shared_ptr 所管理对象的弱引用
auto_ptr C++ 17 中移除 拥有严格对象所有权语义的智能指针

unique_ptr

std::unique_ptr 是通过指针占有并管理另一对象,并在 unique_ptr 离开作用域时释放该对象的智能指针。在下列两者之一发生时用关联的删除器释放对象:

  • 销毁了管理的 unique_ptr 对象
  • 通过 operator= 或 reset () 赋值另一指针给管理的 unique_ptr 对象。

shared_ptr

std::shared_ptr 是通过指针保持对象共享所有权的智能指针。多个 shared_ptr 对象可占有同一对象。下列情况之一出现时销毁对象并解分配其内存:

  • 最后剩下的占有对象的 shared_ptr 被销毁;
  • 最后剩下的占有对象的 shared_ptr 被通过 operator= 或 reset () 赋值为另一指针。

有两种方式创建 shared_ptr

void main( )
{
    shared_ptr<int> sptr1( new int );
    // 使用 make_shared 宏可以加速创建的过程
    // 因为 shared_ptr 主动分配内存并且保存引用计数 (reference count)
    shared_ptr<int> sptr2 = make_shared<int>(100);
}

参考:C++ 智能指针 - 内存泄露的惨痛经历