C++中动态资源管理

本文探讨了C++中动态资源管理的重要性,尤其是内存管理,如何通过对象来确保资源的正确释放以防止内存泄露。举例分析了可能出现内存泄露的情况,并介绍了auto_ptr作为智能指针在管理资源中的作用,强调了析构函数在对象生命周期结束时自动调用来释放资源的机制。
摘要由CSDN通过智能技术生成

昨天看到一个知识点觉得挺有意思的,而且自己还不是很清楚,觉得讲得很好。主题是“以对象来管理资源”

C++中用得最多的就是动态的内存分配,程序中的大部分bug也都是源自于内存泄露,这也是C++相较于其他高级语言更复杂的主要原因之一,不过考虑到它强大的功能和超高的效率,这样的复杂度也是应该的,所以上天是公平的,有点扯远了。内存只是我们必须管理的资源之一,其他常用到的资源还包括文件描述符,数据库连接,socket等,不论是哪种资源,我们用完之后必须要归还给操作系统,否则就会出现Memory Leak

看下面一段代码:

#include <iostream>

using namespace std;

class Widget

{

public:

      Widget()

      {

        cout<<"Widget()"<<endl;

      }

 

      ~Widget()

      {

        cout<<"~Widget()"<<endl;

      }

 

};

 

 

Widget* CreateWidget()

{

   Widget* pA = new Widget;

   return pA;

}

void MaybeMemoryLeak()

{

   Widget* p = CreateWidget();

   //....

   //....

   //....

   if(p!=NULL)

      return;

   delete p;

}

int main()

{

    MaybeMemoryLeak();

    cout << "Hello world!" << endl;

    return 0;

}

乍一看,这段代码没有什么问题,仔细一想,这段代码确实有问题,而且问题很大。在函数“MaybeMemoryLeak()”中极有可能发生内存泄露,这段代码执行下来析构函数没有被调用,也就是发生了内存泄露。原因就在于delete p之前函数已经返回了,所以delete p不会执行。

有人肯定会说只要保证在delete p之前不执行return语句就可以了。貌似是这样,但是如果程序都如我们所预想的逻辑那样跑,那也就没有bug一说了。即使我们在delete p之前保证没有return语句

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值