C++/QT学习笔记 5

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

猜你喜欢

转载自blog.csdn.net/m0_37895939/article/details/86621176