隐式定义的类的析构函数

nit*_*ian 2 c++ constructor destructor explicit-constructor

考虑其不具有类的情况destructor,并constructor通过开发者明确声明.我知道在这种情况下destructor,一个班级implicitly declared就是这样.然后是真实的,destructorimplicitly defined,只有当一个类的对象是即将被销毁?

构造函数的行为也与上面相同.是implicitly defined仅在创建类的对象时?

编辑

class A {
  public:

};
int main() {

}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,将隐式声明~A().我的问题是,只有当类的对象被实例化时,是否真的会隐式地进行析构函数的定义.

class A {
      public:

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

或者是否隐式定义,即使没有进行对象实例化?

Mik*_*our 5

是的,隐式声明的默认构造函数和析构函数在用于创建或销毁对象的实例时是隐式定义的.用标准的话来说(C++ 11):

12.1/6:当使用odr-used(3.2)来创建其类类型(1.8)的对象或在第一次声明后显式默认为默认构造函数时,默认构造函数是默认的并且未定义为已删除.

12.4/5:当使用odr-used(3.2)销毁其类类型(3.7)的对象或在第一次声明后明确默认时,默认定义了一个默认的析构函数并且未定义为已删除的析构函数.

所以它们是在你的第二个代码片段中定义的,它创建并销毁了一个类型的对象A,但不是在第一个代码片段中,而不是在第一个代码片段中.