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