После этого кода _var2 Dangling pointer
,
int* _var = new int(102);
auto _var2 = _var;
delete _var;
Должен ли я удалить _var2 (delete _var2
)? Это неизбежно?
Нет, потому что он уже был удален.
delete
Ключевое слово на самом деле не удаляет указатель, это удаляет значение, на которое оно указывает. В этом случае вы выделяете целое число 102 в куче в строке 1, а затем удаляете это целое число в строке 3. Оба ваших указателя (_var
а также _var2
) все еще держите адрес где целое число было, но его там больше нет. delete _var2
было бы неправильно, потому что ничего не выделено по этому адресу.
Я рекомендую вам использовать из «std :: tr1 :: shared_ptr» для управления ресурсами.
в «эффективном с ++» Скотта Мейерса в главе 3 есть полезная информация об этом.
UPD.
В общем случае вам не нужно это делать, потому что точки it уже будут удалены. Если вам нужно работать с указателями, лучше установить указатель на NULL после его удаления:
int* _var = new int(102);
auto _var2 = _var;
...
if(!!_var)
{
delete _var;
_var = NULL;
}