Удаление TDataModule
dmLogin = new TdmLogin(Application);
По завершению функции выполняется delete dmLogin. В дебагере dmLogin равен NULL.
После мне необходимо проверить на равенство NULL в другой функции:
if(dmLogin->dbRG->Connected)
SetMenuItems(true);
else SetMenuItems(false);
}
else{
SetMenuItems(false);
}
Воздесь то собственно бока и происходят - указатель оказывается не равен NULL. Где я ошибся?
Может где-то strcpy(), "переадресует" dmLogin. :)
Да нет, проверил все вроде. Я так думаю, что скорее всего модуль необходимо привязывать к форме - при уделении формы, будет разрушатся и объект дата модуля, правда это не проверено. Я сейчас создаю в потоке дата модуль для главной формы, а потом просто проверяю - есть соединение или нет с базой. Тоже решение. И еще можно попробовать создать ДМ в потоке и обращаться к нему. Тогда по идее завершение потока должно привести к разрушению объекта - сейчас попробую напишу что получилось.
Воздесь то собственно бока и происходят - указатель оказывается не равен NULL. Где я ошибся?
На этот случай у Борланда в SysUtils описана процедура FreeAndNil
Возникла вот такая проблема. Есть некоторый TDateModule зосдающийся на этапе выполнения программы
dmLogin = new TdmLogin(Application);
По завершению функции выполняется delete dmLogin. В дебагере dmLogin равен NULL.
После мне необходимо проверить на равенство NULL в другой функции:
if(dmLogin->dbRG->Connected)
SetMenuItems(true);
else SetMenuItems(false);
}
else{
SetMenuItems(false);
}
Воздесь то собственно бока и происходят - указатель оказывается не равен NULL. Где я ошибся?
А так не получается?
dmLogin = NULL;
А так не получается?
dmLogin = NULL;
Именно так и необходимо делать, удаление объекта происходит, и указатель становится неопределенным - т.е. необходимо использовать аутоптр или ему подобное или не забывать обнулять. Но в конечном итоге, я коннект с базой вынес в отдельный поток - пользователь может войти и выйти но не может завершить программу. Это оказалось менее накладно, чем постоянно создавать и удалять классы и позволило более гибко отслеживать состояние коннекта и права пользователя. Необходимость разрушения объекта была вызвана необходимостью коннектится к базе как сисдба к системным таблицам для считывания списка пользователей. Теперь эта задача решается локально в конструкторе потока и там же объект и разрушается с очисткой памяти.