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