Вспоминаю C++, используя Qt.
Model::Item* item;
item = new Model::Item();
item->Title = "XXX";
item->Price = 20.00;
item->Id = 0;
//смотрю через дебаггер, вижу объект с полями имеющими значения
delete item;
item;
//объект продолжает существовать, все поля имеют те же значения
if(item)
qDebug() << "item exists"; //попадаю в этот блок
Ожидал увидеть отсутствие объекта item и значение указателя что-то типа 0x0. Что делаю не так?
Вы путаетесь в терминах - где-то в памяти есть объект класса Model::Item и есть указатель на него item. В строке item = new Model::Item(); вы создаете объект в памяти и присваиваете его адрес указателю item, указатель по сути это просто переменная типа unsigned long (? точно не помню, да и от конкретной платформы зависит вроде) т.е. не более чем число, но с возможностью дергать поля и методы того типа, на который указывает, при этом эти поля и методы никак не влияют на сам указатель, только на объект. В строке delete item; вы удаляете объект класса Model::Item, теперь память где он раньше был свободна, но указатель по прежнему указывает на нее, вот if(item) и срабатывает, но по факту по этому адресу уже мусор и что произойдет если вы попытаетесь к нему обратиться неизвестно (может падение, может мусор какой в ответ получите). Скажу вам по секрету, если вы этот иф поставите второй строкой он тоже скорее всего сработает - он ведь срабатывает всегда когда item не равен nil, а изначально вы его не занилялли
По поводу объект продолжает существовать - я не уверен что удаление объекта через деструктор это автоматом и затирание его в памяти, для ускорения при некритичных по секретности операциях память вполне может просто помечаться как свободная, как это происходит в файловой системе при удалении файла, но реально нулями она не затирается и формально пока вы не записали что-то новое из той области памяти можно прочитать уже удаленный объект.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости