Вспоминаю 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, а изначально вы его не занилялли
По поводу объект продолжает существовать - я не уверен что удаление объекта через деструктор это автоматом и затирание его в памяти, для ускорения при некритичных по секретности операциях память вполне может просто помечаться как свободная, как это происходит в файловой системе при удалении файла, но реально нулями она не затирается и формально пока вы не записали что-то новое из той области памяти можно прочитать уже удаленный объект.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хочу понять, как пользоваться вокселямиКак всё это работает, представляю, а вот как это выразить в кусочке кода на c++ - не знаю