为什么具有用户声明的析构函数的类具有隐式默认构造函数?

1 c++ constructor default-constructor

码:

struct A
{ 
    ~A(){ };
};

A::A(){ }; //error: definition of implicitly declared default constructor

int main()
{
    A a;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

为什么代码会产生错误?我希望程序编译好.标准说N3797::12.8/7 [class.copy]:

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

这是一个错误或我的误解?

Ali*_*zmi 6

struct A
{ 
  ~A(){ };
   A();
};

A::A(){ }; //here you can define default constructor

int main()
{
 A a;
}
Run Code Online (Sandbox Code Playgroud)

你已经定义了显式析构函数而不是构造函数,添加构造函数声明并将其定义为外部clas


Vla*_*cow 5

您可能无法通过编译器定义隐式声明的构造函数。

从C ++标准(12个特殊成员函数)开始

  1. ...程序不得定义隐式声明的特殊成员函数