Некоторым программистам нравится устанавливать нулевую переменную указателя после освобождения указателя:
delete ptr;
ptr = 0;
Если кто-то попытается снова освободить указатель, ничего не произойдет.На мой взгляд, это неправильно.Доступ к указателю после освобождения pointee является ошибкой, и ошибки должны появиться у вас как можно скорее.
Есть ли альтернативное значение, которое я мог бы назначить переменной указателя, которая обозначает освобожденных pointees?
delete ptr;
ptr = SOME_MAGIC_VALUE;
В идеале я бы хотел, чтобы Visual Studio 2008 сообщала мне « Программа была прервана, потому что вы пытались получить доступ к уже выпущенному pointee здесь! » в режиме отладки.
Ладно, похоже, я должен сделать проверку сам.Что-то не так со следующим шаблоном?
template <typename T>
void sole_delete(T*& p)
{
if (p)
{
delete p;
p = 0;
}
else
{
std::cerr << "pointee has already been released!\n";
abort();
}
}