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

时间:2014-10-31 05:18:01

标签: c++ constructor default-constructor

代码:

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

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

int main()
{
    A a;
}

DEMO

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

  

如果类定义未明确声明副本   构造函数,一个是隐式声明的。如果是类定义   声明一个移动构造函数或移动赋值运算符   隐式声明的复制构造函数被定义为已删除;除此以外,   它被定义为默认值(8.4)。 如果,则不推荐使用后一种情况   类具有用户声明的复制赋值运算符或用户声明的   

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

2 个答案:

答案 0 :(得分:5)

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

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

int main()
{
 A a;
}

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

答案 1 :(得分:4)

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

来自C ++标准(12个特殊成员函数)

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