C++智能指针

https://www.cnblogs.com/WindSun/p/11444429.html

C++智能指针

1. auto_ptr:

采用所有权模式, 当智能指针之间相互赋值时, 所有权会转移。 当使用失去所有权的智能指针时, 会导致程序崩溃

不能使用new [] 和 delete []

2. unique_ptr

unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。(已经代替了auto_ptr)

(如果源智能指针不是临时对象)禁止了赋值传递所有权, 不会留下危险的悬挂指针

可以用于new [] 和 delete []

3. shared_ptr

实现共享式拥有概念。多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。它使用计数机制来表明资源被几个指针共享。

当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,从而导致内存泄漏。

也不能使用 new [] 和 delete []

4. weak_ptr

weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的shared_ptr, weak_ptr只是提供了对管理对象的一个访问手段。weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。weak_ptr是用来解决shared_ptr相互引用时的死锁问题,如果说两个shared_ptr相互引用,那么这两个指针的引用计数永远不可能下降为0,资源永远不会释放。它是对对象的一种弱引用,不会增加对象的引用计数,和shared_ptr之间可以相互转化,shared_ptr可以直接赋值给它,它可以通过调用lock函数来获得shared_ptr。

 

posted @ 2020-09-10 15:43  x_Aaron  阅读(127)  评论(0)    收藏  举报