您的位置:首页 > 编程语言 > C语言/C++

c++避免内存泄漏

2016-08-04 19:21 183 查看
一旦将c++用的十分纯熟了,忘掉了c++里的各种“特性”,避免接近很多"坑",会发现c++其实还是有很多优点的,比如避免内存泄漏。

        我们发送消息的代码在c语言中常常这样写

Message* m=CreateMessage();

SendMessage(m);

如果在上述两句之间有很多代码,一不小心就会有内存泄漏。ps:很多c++程序也是这样写的,其实没有领悟c++的精髓。

我们稍微封装一下

class NetPacket
{
public:
  ~NetPacket()
  {
    if(_m)
      DestroyMessage(_m);
  }
  NetPacket()
  {
    _m=CreateMessage();
  }
  Message* Exchange()
  {
     Message* m=_m;
     _m=nullptr;
     return m;
  }
private:
  Message* _m;
};

void SendNetPacket(NetPacket& pack)
{
  Message* m=pack.Exchange();
  SendMessage(m);
}

NetPacket pack;

SendNetPacket(pack);

妈妈再也不用担心内存泄漏了。

       事实上,这种同一函数内部的内存泄漏问题都可以利用c++的析构函数来自动解决。你永远不会看到c代码里面类似

goto freeresouce1;goto freeresource2之类的代码。

当然你可以说你的功底深厚不会发生这种低级错误。但是谁能保证自己永不犯错呢?

       跨越函数的内存泄漏问题就没简单的办法解决了,毕竟内存问题是c和c++的固有问题。个人不建议用智能指针,智能指针本身就是个问题,这也是c++被很多c程序员黑的原因之一,毕竟c++槽点太多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: