Является ли деструктор конечной точкой программы? - PullRequest
0 голосов
/ 17 мая 2019

Предположение, что у меня есть ~MyClass()

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

MyClass::~MyClass()
{
}

Поскольку я знал, что m_colNameMap будет автоматически освобождать память, но мне интересно, что после выхода из деструктора вся память была освобождена для ОС?или процесс выпуска действует за }?

Если я поставлю контрольную точку mem следующим образом:

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

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

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

Это правильный путь?

1 Ответ

0 голосов
/ 17 мая 2019

Вы связываете "деструктор" с концом программы. Однако деструктор связан с концом объекта. И ваша программа обычно имеет много объектов. Некоторые недолговечны, некоторые долговечны.

Поэтому ваша идея проверки различий в памяти вообще не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...