如何在c ++中很好地释放内存

时间:2018-02-08 06:58:01

标签: c++ memory-leaks

我试图彻底学习和理解释放记忆的正确设计和技巧。

我写了一个非常简单的测试类和一个主要函数:

#include <iostream> 
using namespace std;

class TestClass{
public:
  bool *state;
  void setState (bool b) {*state = b;}
  TestClass(){state = new bool(false);
              cout << "new object created in heap;state is pointing to it." << endl;}
  ~TestClass(){delete state; 
               state = NULL;
               cout << "object deleted. " << endl;
               cout << "pointer variable set to NULL."<< endl;
               cout << "memory should be freed." << endl;}
};

int main(void){
  TestClass obj; //default constructor called automatically
  cout << "before:" << * (obj.state) << endl;
  obj.setState(true);
  cout << "after:" << * (obj.state) << endl;
  return 0;
  //destructor called automatically to destroy obj
}

如你所见,我用一个布尔指针变量,一个默认构造函数,一个改变状态的void函数和一个析构函数编写了一个testClass。

输出效果似乎很好。

然而,当我在valgrind上运行它以检查内存泄漏时,它说 可能丢失:3个块中的72个字节。虽然我肯定丢失的字节和间接丢失的字节都是0(好)。

我想知道我还需要做些什么来解决可能丢失的问题,或者如何整体改变我的程序以使其更好。

当前更新:我正在检查如何包装函数,智能指针和五/零规则。

当前更新2:它肯定是我的mac上安装的valgrind,它有所有这些问题......应该立即卸载。

这是我实际可靠的valgrind检查:

==17388== 
==17388== HEAP SUMMARY:
==17388==     in use at exit: 0 bytes in 0 blocks
==17388==   total heap usage: 2 allocs, 2 frees, 72,705 bytes allocated
==17388== 
==17388== All heap blocks were freed -- no leaks are possible
==17388== 
==17388== For counts of detected and suppressed errors, rerun with: -v
==17388== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

0 个答案:

没有答案