C++11智能指针

本文介绍了C++11中的智能指针,包括unique_ptr、shared_ptr和weak_ptr。unique_ptr通过严格的所有权实现独占,避免了auto_ptr的重复释放问题,且支持数组分配。shared_ptr使用引用计数,允许多个指针共享同一内存,但可能导致循环引用。weak_ptr作为弱引用,用于配合shared_ptr防止循环引用。
摘要由CSDN通过智能技术生成

智能指针

  1. 使用普通指针管理堆内存时,容易因忘记释放造成堆内存泄漏、二次释放以及由于程序发生异常时内存泄漏等问题,因此C++引入智能指针auto_ptr来帮助管理的堆内存
  2. C++11摒弃了auto_ptr(只是一种建议,编译器并不禁止),并新增了三种智能指针:unique_ptr、shared_ptr和weak_ptr
  3. 智能指针对象管理内存的基本思想:将new获得的内存地址赋值为智能指针对象,当智能指针过期时,其析构函数将使用delete来释放内存
  4. 要定义智能指针,必须包含头文件#include <memory>
auto_ptr<int> ptr1{
    new int };  //正确的
auto_ptr<int> ptr2(new int);    //正确的
auto_ptr<int> ptr2 = new int;   //错误的,只能指针不允许隐式类型转换

auto_ptr

  1. auto_ptr是C++98就引入的智能指针,目前被C++11摒弃
  2. auto_ptr的基本用法:
class A
{
   
public:
	A(){
   cout<<"A()"<<endl;}
	~A(){
   cout<<"~A()"<<endl;}
	int data;
};
auto_ptr<A> ptr(new A);
ptr->data = 10;  //与普通指针类似使用->访问所指向的对象的成员
ptr.reset(new A);  //会先释放已有的内存(调用~A())然后指向新的内存(调用A())
ptr.release();  //释放智能指针所指向的内存(调用~A()),智能指针内部的普通指针被置为空指针
A* ptr2 = ptr.get();  //返回智能指针对象所指向内存的地址
  1. auto_ptr的缺点:
int * ps = new int;
int * ps1 = ps;

(1)假如

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_46427273

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值