Есть ли установленное значение указателя для освобожденного указателя?

Некоторым программистам нравится устанавливать для переменной-указателя значение 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();
    }
}
6
задан fredoverflow 20 January 2011 в 12:57
поделиться