学习笔记 | c++中的smart pointer四个智能指针 shared_ptr、unique_ptr、weak_ptr、auto_ptr

本文介绍了C++中的四种智能指针:auto_ptr(已被弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针的主要作用是防止内存泄漏,通过RAII原则管理内存。unique_ptr实现独占式拥有,避免了auto_ptr的潜在内存崩溃问题。shared_ptr支持共享式拥有,多个指针可指向同一对象,通过引用计数管理资源。weak_ptr则用于解决智能指针相互引用导致的死锁问题,提供对已管理对象的弱引用。
摘要由CSDN通过智能技术生成

c++中的smart pointer四个智能指针

  • C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr其中后三个是c++11支持,并且第一个已经被11弃用。
  • RAII全称是“Resource Acquisition is Initialization”,直译过来是“资源获取即初始化”,也就是说在构造函数中申请分配资源,在析构函数中释放资源。
  • 智能指针即RAII最具代表的实现。
#include <memory>
为什么要使用智能指针:解决内存泄漏
  • 智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时忘记释放,造成内存泄漏。
  • 使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域是,类会自动调用析构函数,析构函数会自动释放资源。
  • 智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。
1. auto_ptr(c++98的方案,c++11已经抛弃)
  • 采用所有权模式
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的缺点是:存在潜在的内存崩溃问题!
2. unique_ptr(替换auto_ptr)
  • unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。 它对于避免资源泄露(例如“以new创建对象后因为发生异常而忘记调用delete”)特别有用。
  • 采用所有权模式,还是上面那个例子
unique_ptr<string> p3 (new string (
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值