Если у вас есть указатель, который все еще находится в области видимости после удаления, вызванного через него, хорошей идеей будет установить его в nul. Таким образом, вы гарантированно получите какой-то сбой, если будете использовать его снова. Пока вы исследуете эту тему, взгляните на ССЫЛКИ и АВТОПОИНТЕРЫ, поскольку они могут спасти вам часть этого горя. (Kerrek SB прав в том, что деструктор вызывается слишком для типов объектов.)

му, чтобы лучше понять новое / удалить (на самом деле, чтобы доказать себе на небольших примерах, зачем нужны виртуальные деструкторы для интерфейсов), я хочу понять утечки памяти, чтобы жить в страхе перед ними. Но мне трудно, так сказать, протекать; на самом деле, мне тоже тяжело с новой / удалить.

Вот моя самая простая версия:

int* P1 = new int(43);

cout<<"P1 = "<<P1<<endl;
cout<<"*P1 = "<<*P1<<endl;

delete P1;

cout<<"P1 = "<<P1<<endl;
cout<<"*P1 = "<<*P1<<endl;

Это печатает:

P1 = 0xcc0340
*P1 = 43
P1 = 0xcc0340
*P1 = 43

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

Ответы на вопрос(8)

Ваш ответ на вопрос