如果只声明虚析构函数为默认,复制构造函数是隐式生成的吗?

问题描述 投票:0回答:1

在下面的例子中 隐式地,不会创建移动构造函数和移动赋值运算符。我知道。

那么,复制构造函数和复制赋值运算符是生成的吗?

未定义的复制构造函数是隐式创建的吗?

class X
{
  public:
    virtual ~X() = default; 
}

我引用的链接如下:

c++ copy destructor stdmove
1个回答
0
投票

复制构造函数是否生成?

复制构造函数是默认的,但现在这种情况已被弃用,从class.copy.ctor#6中可以看出:

如果类定义没有显式声明复制构造函数,则隐式声明非显式复制构造函数。 如果类定义声明了移动构造函数或移动赋值运算符,则隐式声明的复制构造函数被定义为已删除; 否则,它是默认的([dcl.fct.def])。 如果类具有用户声明的复制赋值运算符或用户声明的析构函数([depr.impldec]),则不推荐使用后一种情况。

(强调我的)

由于您确实有一个用户声明的析构函数,因此已弃用。

© www.soinside.com 2019 - 2024. All rights reserved.