析构函数是程序的终点吗?

时间:2019-05-17 06:47:05

标签: c++ memory-management memory-leaks

假设我有~MyClass()

public:
    MyClass();
    ~MyClass();
private:
    map<int,string> m_colNameMap;

MyClass::~MyClass()
{
}

我知道m_colNameMap将是自动的空闲内存,但是我想知道在销毁析构函数之后,所有内存是否都已释放到OS?还是发布过程在}之后起作用?

如果我这样放置一个内存检查点:

_CrtMemState crtMemState;
_CrtMemState s1;
_CrtMemState s2
MyClass(){
 _CrtMemCheckpoint(&s1);

}
MyClass::~MyClass()
{
  _CrtMemCheckpoint(&s2);

    if (_CrtMemDifference(&crtMemState, &s1, &s2)) {
    _CrtMemDumpStatistics(&crtMemState);
    _CrtDumpMemoryLeaks();
   }
}

这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

您要将“ the”析构函数与程序结尾相关联。但是,析构函数与对象的末尾关联。而且您的程序通常具有许多对象。有些是短暂的,有些是长期的。

这就是为什么您检查内存差异的想法通常毫无意义的原因。