经典的问题(上)
当程序中存在多个对象的时候,如何确定这些对象的析构顺序?
关于析构的疑问
单个对象创建时构造函数的调用顺序
1. 调用父类的构造过程(后续再说)
2. 调用成员变量的构造函数(调用顺序与声明顺序相同)---------有可能某个类,它里面的成员是其他类的对象。此时就调用成员变量的构造函数。
3. 调用类自身的构造函数
析构函数与对应构造函数的调用顺序相反
多个对象析构时
同样遵循析构顺序与构造顺序相反
实例分析
构造与析构顺序
#include <stdio.h> class Member { const char* ms; public: Member(const char* s) { printf("Member(const char* s): %s\n", s); ms = s; } ~Member() { printf("~Member(): %s\n", ms); } }; class Test { Member mA; Member mB; public: Test() : mB("mB"), mA("mA") { printf("Test()\n"); } ~Test() { printf("~Test()\n"); } }; Member gA("gA"); int main() { Test t; return 0; }
构造函数的调用顺序:
gA mA mB Test()
析构函数的调用顺序:
~Test()
~Member():mB
~Member():mA
~Member():gA