这是复制构造函数省略

Is this copy constructor elision?

本文关键字:构造函数省 复制      更新时间:2023-10-16

下面的代码不调用复制构造函数。

struct X
{
   int x;
   X(int num)
   {
      x = num;
      std::cout << "ctor" << std::endl;
   }
   X(const X& other)
   {
      std::cout << "copy ctor" << std::endl;
   }
};
int main(int argc, _TCHAR* argv[])
{
   X* x = new X(3);
   X* y(x);
}

输出:

ctor

是抄袭省略吗?

代码

X* x = new X(3);
X* y(x);

X x(3);
X* y = new X(x);

您不是在复制对象,而是在复制指针。X* y(x);之后,两个指针将指向同一个对象。