新(这)意味着什么?

Ele*_*rks 11 c++

我发现这个代码示例用于研究:

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没有带指针的版本.从而:

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

jal*_*alf 13

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

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

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

  • 值得注意的是,如果构造失败(抛出异常),`*this`的内存将不包含有效对象,并且将来尝试使用该对象(如果对象超出范围或者是`删除,则包括任何析构函数调用`d)将有未定义的行为. (5认同)