这是什么语法 - new(this)T();

时间:2014-06-06 23:19:55

标签: c++

我遇到了这样的C ++代码:

T& T::operator=(const T&t) 
{
   ...
   new (this) T(t);
   ...
}

这条线看起来很陌生:new (this) T(t);

我可以看到它正在调用复制构造函数来填充"这个",但不知怎的,我只是无法理解语法。猜猜我已经习惯了this = new T(t);

你可以帮帮我吗?

1 个答案:

答案 0 :(得分:6)

这就是所谓的新贴牌运营商。它在括号中的表达式指定的地址处构造一个对象。例如,可以通过以下方式定义复制赋值运算符

const C& C::operator=( const C& other) {
   if ( this != &other ) {
      this->~C(); // lifetime of *this ends
      new (this) C(other); // new object of type C created
   }
   return *this;
}

在这个例子中,首先使用析构函数的显式调用销毁当前对象,然后在此地址使用复制构造函数创建一个新对象。

这就是这个新运算符不会分配新的内存范围。它使用已经分配的内存。

此示例取自C ++标准。至于我,我不会返回一个const对象。将运算符声明为

更为正确
C& C::operator=( const C& other);