C++11提供了三种智能指针:std::shared_ptr, std::unique_ptr, std::weak_ptr,使用时需添加头文件<memory>。
shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。
每使用他一次,内部的引用计数加1,每析构一次,内部的引用计数减1,减为0时,删除所指向的堆内存。
shared_ptr内部的引用计数是安全的,但是对象的读取需要加锁。
注意,不能将一个原始指针直接赋值给一个智能指针。
不要用一个原始指针初始化多个shared_ptr,原因在于,会造成二次销毁。
构造
1 1、通过构造函数 2 std::shared_ptr<T> p1(new T(1)); 3 2、std::make_shared<T>辅助函数 4 std::shared_ptr<T> p2 = std::make_shared<T>(2); 5 3、reset方法来初始化shared_ptr 6 p1.reset(new T(3));
析构
1 p1.reset();
扫描二维码关注公众号,回复:
1678012 查看本文章