gpt4 book ai didi

c++ - C++ 中的析构函数和构造函数顺序

转载 作者:行者123 更新时间:2023-11-30 01:41:03 26 4
gpt4 key购买 nike

我有一小段代码如下:

#include <iostream>

using namespace std;

class C {
public:
C() {i = 6; cout << "C0:" << i << endl;}

C(int i0) {i = i0; cout << "C1:" << i << endl;}

~C() {cout << "C2:" << i << endl;}
private:
int i;
};

class D {
public:
D() {cout << "D0" << endl;}
~D() {cout << "D1" << endl;}
private:
C c;
};

int main(int argc, char* argv[]) {
cout << "X" << endl;
D d;
cout << "Y" << endl;
}

其输出为:

XC0:6D0YD1C2:6

我的问题是:为什么在这种情况下 D0 之前创建 C0:6

我知道对于继承的类,顺序是基础构造函数->派生构造函数->派生析构函数->基础析构函数。所以,如果 D 是从 C 继承的,那么我会期望这里的顺序。但是,据我所知,D 不是 C 的子类;它只包含 C 类的一个实例。

那么在这种情况下,为什么我得到的输出顺序与 DC 的子类一样?

显然有一条我不理解的基本规则。

最佳答案

基类对象和成员变量(按此顺序)在构造函数体中的语句执行之前被初始化。

cD 的成员,因此您会看到 cD 的构造函数之前进行初始化 body 。

破坏的顺序与构造的顺序相反。

关于c++ - C++ 中的析构函数和构造函数顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42081485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com