在c++中删除指针对象

Delete pointer object in C++

本文关键字:指针 对象 删除 c++      更新时间:2023-10-16

我在开源项目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;
}

但是我不知道这句话的意思:

*(&p) = NULL;

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

完全没有意义。在一般情况下,一元*&操作符彼此是相反的(有一些细节,比如表达式&*foo不是左值,即使foo是左值),尽管操作符重载可以改变这种行为。

然而,由于T*始终是指针类型,而不管T类型如何,因此不可能为T*重载一元operator&,因此*(&p)相当于p,并且将NULL第二次赋值给p是无用的。