总结四类智能指针

本文介绍了C++中的智能指针,包括auto_ptr(已被弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针用于自动管理动态分配的内存,防止内存泄露和野指针问题。unique_ptr采用所有权模式,不允许复制;shared_ptr允许多个指针共享对象,使用引用计数机制;weak_ptr是弱引用,不参与对象生命周期管理,用于解决shared_ptr的循环引用问题。
摘要由CSDN通过智能技术生成

智能指针的理解

C++中的动态内存管理通过 new delete运算符来完成的:

new:在动态内存中为对象分配空间并且返回一个指向该对象的指针,可对对象进行初始化;
delete:接受一个动态对象的指针,销毁该对象,并释放与之关联的内存。

首先说一下为什么使用智能指针,存在以下几种情形:

  1. 申请的空间在使用完 甚至程序结束时忘记释放,这会造成了内存泄露;
  2. 有时在尚有指针引用内存的情况下 内存就被释放了,这会产生非法内存的指针(野指针);

现有的智能指针有:auto_ptr、shared_ptr、weak_ptr、unique_ptr,其中第一个auto_ptr已被c++11弃用,后三个是c++11新支持的。
使用智能指针很大程度上可以避免上面的问题,因为智能指针就是一个类,当超过了类的作用域,类会自动调用析构函数,析构函数会自动释放资源。使用智能指针需要添加头文件memory。

auto_ptr

c++98方案,c++11已经弃用,但是这里还是要讲一下:
auto_ptr采用所有权模式:

auto_ptr< string> p1 (new string ("I reigned lonely as a cloud.”));
auto_ptr<string> p2;
p2 = p1; //auto_ptr不会报错.

此时不会报错,p2剥夺了p1的所有权,但是当程序运行时访问p1将会报错。
所以auto_ptr的缺点是:存在潜在的内存崩溃问题!

unique_ptr

unique_ptr 替换了auto_ptr,同样采用了所有权模式。
unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用。

unique_ptr<string> p3 (new string ("auto"));         
unique_ptr<string> p4;                          
p4 = p3;//此时会报错!!

编译器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值