显式默认析构函数与无

时间:2017-01-05 11:10:22

标签: c++11

显式声明默认析构函数(使用= default)和不声明任何内容之间有什么区别?是否有需要明确定义至少一个默认析构函数的情况?

请注意,我不是在谈论需要释放一些已分配的内存,我是在询问除了默认值之外什么都不做的析构函数

我无法遇到前者与后者有不同行为的情况。在这两种情况下,编译器似乎都会生成对父析构函数或成员析构函数的调用。

在这两种情况下,两种行为(有或没有显式默认的析构函数)似乎都是等价的:

// 1
struct A {
    ~A() { std::cout << "~A()\n"; }
};

struct B : public A {
    // Comment this line out
    ~B() = default; 
};

// 2
struct C { 
    ~C() { std::cout << "~C()\n"; }
};

struct D {
    // Comment this line out
    ~D() = default;
    C c;
};

int main() {
    B b;
    D d;
    return 0;
}

0 个答案:

没有答案