使用智能指针错误导致内存泄漏_C++智能指针使用的那些事

指针指针的由来

在C/C++里面,内存管理由开发者自己管理。指针变量总是指向一片内存空间,这片内存空间可以是局部变量、也可以是通过malloc、new申请的。如果申请的内存没有释放,就会导致内存泄漏。最终因为内存耗尽,服务被操作系统OM掉。

为了解决内存泄漏的问题,Java提出了虚拟机来管理内存,降低程序开发难度。C++则提出了智能指针,auto_ptr、shared_ptr、weak_ptr, unique_ptr,通过智能指针管理分配的内存单元,利用C++类对象的生命周期管理智能指针的生命周期结束后,会调用析构函数释放分配的内存。下面介绍这几个智能指针的使用方法。

auto_ptr 独占式指针

在构造的时候获取资源,在析构的时候释放资源,对指向符->、解引用进行重载,使用起来就像普通的指针。auto_ptr 会存在对象所有权转移的问题,在使用中需要谨慎注意。例如,下面这个case。

std::auto_ptr< string> ps(new string(“I reigned lonely as a cloud.”));

auto_ptr vocation;

vocation = ps; // 所有权发生转移

cout << *ps << endl; // 程序崩溃

cout << *vocation << endl;

这段代码运行后,程序会直接crash。原因在于第三行已经把ps的所有权转移到 vocation,ps的值为0,对一个空指针取值就会出现cras

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值