C++11智能指针主要是shared_ptr和unique_ptr,相对于传统指针,智能指针可以自动释放分配的内存。智能指针实质是模板类,重载了->和*运算符。
-
shared_ptr:多个指针可以指向同一个对象 。内置计数器,每生成一个shared_ptr对象,计数器便增1。
std::shared_ptr<ProducerPrivate> d_producer;
-
unique_prt:指针独占“对象”。
std::unique_ptr<T> ptr
使用shared_ptr注意事项:
(1)、不要把一个原生指针给多个shared_ptr管理;
(2)、不要把this指针给shared_ptr;
(3)、不要在函数实参里创建shared_ptr;
(4)、不要不加思考地把指针替换为shared_ptr来防止内存泄漏,shared_ptr并不是万能的,而且使用它们的话也是需要一定的开销的;
(5)、环状的链式结构shared_ptr将会导致内存泄漏(可以结合weak_ptr来解决);
(6)、共享拥有权的对象一般比限定作用域的对象生存更久,从而将导致更高的平均资源使用时间;
(7)、在多线程环境中使用共享指针的代价非常大,这是因为你需要避免关于引用计数的数据竞争;
(8)、共享对象的析构器不会在预期的时间执行;
(9)、不使用相同的内置指针值初始化(或reset)多个智能指针;
(10)、不delete get()返回的指针;
(11)、不使用get()初始化或reset另一个智能指针;
(12)、如果使用get()返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就变为无效了;
(13)、如果你使用智能指针管理的资源不是new分配的内存,记住传递给它一个删除器。
转载 https://blog.csdn.net/fengbingchun/article/details/52202007