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,并且分配NULL给p第二次是没用的.