智能指针原理剖析(一):auto_ptr、unique_ptr

通过常规指针管理动态内存的难点及缺点:

(1)忘记释放动态内存: 使用new/malloc分配动态内存时,需要使用delete/free手动释放内存,但程序员容易忘记释放内存,从而产生内存泄露;
(2)动态内存释放时机不对: 在尚有指针引用内存的情况下,程序员释放了内存,从而产生空悬指针。典型的案例就是:假设在多线程编程中,线程A、B中分别有指针p1、p2指向对象object,若某个时刻线程A通过p1将object销毁了(释放了object占有的内存),那么线程B中的p2引用object就会产生内存错误。

程序员手动管理动态内存的困难,促使了智能指针的产生。智能指针可以自动隐式地释放动态内存,大大减少了内存错误,方便了动态内存的管理。有很多学者都对智能指针的源码进行了剖析,我将结合源码剖析分两篇博客对auto_ptr、unique_ptr、shared_ptr、weak_ptr依次进行总结。

auto_ptr根据博客https://blog.csdn.net/yanglingwell/article/details/56011576的源码剖析进行原理总结。

auto_ptr

auto_ptr中只有一个私有成员变量,即指向_Ty类型对象的指针_Myptr。

1、构造函数

auto_ptr有三种构造方式,一是通过传入指针来初始化_Myptr,二是通过同类型的auto_ptr对象来拷贝构造,但会利用release函数将原对象指针置为空

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值