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