STL之防止内存泄露

       可以自由分配和释放内存造就了C++的灵活和强大,但这也是使用C++最容易出现问题的地方,内存泄露问题,估计程序猿都会或多或少的遇到,也遭受了很多程序猿们的深恶痛绝,无数个加班的晚上可能就是因为少了一个delete的缘故。
       用过C++的人基本上都应该会了较过一个叫STL(标准模板库)的东西,这个东西在一定程度上,更进一步推动了C++的发展和普及程序,里面对于C++模板以及C++三大特性封装、继承、多态的使用可以说是淋漓尽致,具体的介绍可以参考侯捷老师的《STL源码剖析》。STL有一个智能指针的东西,即auto_ptr,有了智能指针以后,再也不用担心忘记调用delete释放堆内存了。auto_ptr主要是通过构造函数来绑定堆内存指针,当auto_ptr对象销毁的时候,其析构函数就会释放掉绑定的堆内存,示例代码如下:

void Func1()
{
    int *ptr = new int;

    //...具体函数逻辑

    delete ptr;	//当函数逻辑很复杂的时候,很容易忘记这一句
}

void Func2()
{
    auto_ptr<int> ptr(new int);

    //...具体函数逻辑
}

       上面的Fun1函数在申请和释放堆内存至少要两句代码,而使用auto_ptr的Fun2函数只需要一句代码就可以了,还能保证在退出作用于的时候自动释放申请的内存空间,既干净又环保。
       auto_ptr的实现就是《Effective C++》提到的以对象管理资源的方法,众所周知,类对象在退出其作用域时,会自动调用其析构函数,我们可以充分利用编译器提供的便利,在对象的构造函数生产资源,在对象的析构函数释放资源,这样就不用担心忘记释放资源了,但是既然有了auto_ptr这样的强大工具,我们没必要再重造车轮了,直接拿来主义就好了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值