new (this)是什么意思?

What does new (this) mean?

本文关键字:意思 是什么 this new      更新时间:2023-10-16

我找到了这个代码样本来学习:

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. new (this)是什么意思?
  2. 它的用途是什么?
  3. 如果它没有在文档中列出,怎么能这样调用呢?

它被称为"placement new",代码片段中的注释几乎解释了它:

在括号中指定的地址中构造一个类型为T的对象,而不为其分配内存。

所以你看到的是一个拷贝赋值操作符,它首先销毁被拷贝对象(不释放内存),然后在相同的内存地址中构造一个新的对象。(正如在注释中指出的那样,以这种方式实现操作符也是一个非常糟糕的主意)