我试图彻底学习和理解释放记忆的正确设计和技巧。
我写了一个非常简单的测试类和一个主要函数:
#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)