我发现这个代码示例用于研究:
T & T::operator=(T const & x)
{
if (this != &x)
{
this->~T(); // destroy in place
new (this) T(x); // construct in place
}
return *this;
}
Run Code Online (Sandbox Code Playgroud)
当我查看文档时,new没有带指针的版本.从而:
jal*_*alf 13
它被称为"placement new",代码片段中的注释几乎可以解释它:
它T在括号中指定的地址中构造一个类型的对象而不为它分配内存.
所以你要看的是一个复制赋值运算符,它首先销毁被复制的对象(不释放内存),然后在同一个内存地址中构造一个新的.(正如评论中所指出的那样,以这种方式实现运算符也是一个非常糟糕的主意)