在C++中删除指针对象

thi*_*khy 7 c++ pointers delete-operator

我在开源项目X3C中读取了以下用于删除指针对象的代码.

//! Delete pointer object.
/*!
    \ingroup _GROUP_UTILFUNC
    \param p pointer object created using 'new'.
*/
template<class T>
void SafeDelete(T*& p)
{
    if (p != NULL)
        delete p;
    p = NULL;
    *(&p) = NULL;
}
Run Code Online (Sandbox Code Playgroud)

但我不知道这条线的意思:

*(&p) = NULL;
Run Code Online (Sandbox Code Playgroud)

在上面的行(p = NULL;)中,p被赋值为NULL.我认为它需要以另一种方式再次这样做.

Ada*_*eld 12

这完全没有意义.在普通条件下,一元*&运算符是彼此相反的(有一些细节,就像表达式&*foo不是左值,即使foo是左值),尽管运算符重载可以改变这种行为.

但是,由于T*无论类型如何总是一个指针类型T,因此不可能使一元operator&数重载T*,因此*(&p)仅相当于p,并且分配NULLp第二次是没用的.