新(这)意味着什么?

时间:2014-03-24 08:45:28

标签: c++

我找到了这个用于研究的代码示例:

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}}时,没有指针的版本。因此:

  1. 新(这)意味着什么?
  2. 它用于什么?
  3. 如果未在文档中列出,如何调用它?

1 个答案:

答案 0 :(得分:13)

它被称为" placement new",您的代码段中的注释几乎可以解释它:

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

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