Деструктор не называется

Это выдержка из моего метода WinMain. Это не полный, но я думаю, что это достаточно, чтобы проиллюстрировать суть проблемы. Пожалуйста, не спрашивайте, почему я удаляю модуль данных явно, когда это должно быть сделано автоматически. Это совсем другая проблема (связана с неправильным порядком завершения, когда инициализация приложения заканчивается преждевременно, за исключением одного из конструкторов).

extern PACKAGE TDataModule_Local *DataModule_Local;

class TDataModule_Local :
public TDataModule
{
...
public:
__fastcall        TDataModule_Local(TComponent *Owner);
__fastcall        ~TDataModule_Local();
}

WINAPI wWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
Application->Initialize();
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TDataModule_Local), &DataModule_Local);
Application->Run();

if (DataModule_Local != NULL)
{
delete DataModule_Local;     // destructor not called! why?
DataModule_Local = NULL;
}

return 0;
}

Что за странный деструктор модуля данных не вызывается, когда я использую оператор удаления. Is вызывается после того, как программа достигает закрывающей скобки метода WinMain:

введите описание изображения здесь

0

Решение

Вы сказали

удаление модуля данных явно, когда это должно быть сделано автоматически

Очевидно, что любой код, предназначенный для его автоматического освобождения, все еще пытается это сделать, к счастью, не обращая внимания на ваши проблемы с порядком завершения.

Тот факт, что вы установили указатель на NULL, не означает, что в списке объектов, подлежащих очистке при выходе, нет копии указателя.

1

Другие решения

Других решений пока нет …