如下模板函数,安全删除指针,最后一行代码是多余吗?*(&p) = NULL
template
void SafeDelete(T*& p)
{
if ( p != NULL )
delete p;
p=NULL;
*(&p) = NULL;
}
是多余
template
void SafeDelete(T*& p)
{
if ( p != NULL )
delete p;
p=NULL;
}
不多余,也是错的,在P=NULL后,向NULL的指针写内容
是多余的,P已经是NULL指针了,不能再取出它的地址然后赋值。
我不想细究你这行代码是不是多余。
我可以告诉你,你上述所有代码都是画蛇添足。
首先,只要待删除的指针不是一个stack指针,那delete操作都是安全的,即使指针为空也不会有任何问题(当然也需要区分delete和delete[])。所以你这个函数完全是浪费效率,如果要删除动态分配的内存直接delete就可以了。
另外,我搞不懂你对一个空指针解除引用是要弄啥。
template
void SafeDelete(T*& p)
{
// if ( p != NULL ) //这行也是多余的,delete 一个空指针是不会有问题的
delete p;
p=NULL;
//*(&p) = NULL; // 这也是多余的,这其实等价于p = NULL, 跟上一行代码是同一个意思
}