C++总复习6--C++程序设计--智能指针

C++总复习6--C++程序设计--智能指针

1.auto_ptr

2.unique_ptr

3.shared_ptr

4.weak_ptr

5.scoped_ptr


new

delete

容易出现内存泄漏

解决方法:自主的内存回收机制

     人为开辟

     系统释放

int* p = new int;

所有权交给栈上的一个变量

 

栈    系统开辟     系统释放

堆    人为开辟     人为释放

 

对象的生成

  1. 开辟内存
  2. 调用构造函数

对象的销毁

  1. 调用析构函数
  2. 释放内存

        交给有名称的对象管理,对象生存周期到了,栈由系统销毁,

实现了系统调用析构函数,释放堆内存

 

C++98  

auto_ptr

    1. 所有权唯一:旧智能指针所有权赋给新智能指针,旧智能指针的所有权被取消

    2.可能导致智能指针提前失效

#include <memory>
int mian()
{
   std::auto ptr<int> apl(new int);//
   return 0;
}

 

 

C++11   boost库

1.scope_ptr( unique_ptr)    

   所有权唯一

      禁止拷贝,移动赋值等操作转移权限

  不能实现共享

2.shared_ptr   (强智能指针)

允许多个智能指针对象指向同一堆内存

   共享

引用计数:

      记录该堆内存有多少个对象指向

     多一个对象指向      +1

     少一个对象指向      -1

     最多一个对象销毁    释放该对内存

问题:智能指针的相互引用问题,会导致内存泄漏

3.weak_ptr  ( 弱智能指针)

解决强智能指针相互引用的问题

(1)不能单独使用   必须结合shared_ptr使用

(2)不处理引用计数

 

 

猜你喜欢

转载自blog.csdn.net/qq_41103495/article/details/107975651