代码拉取完成,页面将自动刷新
在C++中,类的构造和析构顺序遵循以下规则:
举个例子:
#include <iostream>
using namespace std;
class Base {
public:
Base() { cout << "构造基类对象\n"; }
~Base() { cout << "析构基类对象\n"; }
};
class Derived : public Base {
public:
Derived() { cout << "构造派生类对象\n"; }
~Derived() { cout << "析构派生类对象\n"; }
};
int main() {
Derived d;
return 0;
}
输出将会是:
复制代码构造基类对象
构造派生类对象
析构派生类对象
析构基类对象
对于成员变量,我们可以稍微修改一下代码:
#include <iostream>
using namespace std;
class Member {
public:
Member(const char* s) { cout << "构造成员对象: " << s << "\n"; }
~Member() { cout << "析构成员对象\n"; }
};
class WithMembers {
public:
WithMembers() : m2("m2"), m1("m1") { cout << "构造包含成员的对象\n"; }
~WithMembers() { cout << "析构包含成员的对象\n"; }
private:
Member m1;
Member m2;
};
int main() {
WithMembers wm;
return 0;
}
你会看到如下的输出:
复制代码构造成员对象: m1
构造成员对象: m2
构造包含成员的对象
析构包含成员的对象
析构成员对象
析构成员对象
即使在构造函数中 m2
在 m1
之前初始化,m1
和 m2
的构造顺序还是按照它们在类中声明的顺序。同样,析构顺序与构造顺序相反。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。