构造函数执行顺序

  1. 调用虚基类构造函数(如有多个则按虚基类声明顺序从左到右)
  2. 调用基类构造函数(如有多个则按基类声明顺序从左到右)
  3. 设定虚函数表指针值(virtual table pointer)
  4. 执行初始化列表、调用成员变量构造函数(按成员变量声明顺序)
  5. 执行自身构造函数

析构函数执行顺序(与构造函数相反)

  1. 执行自身析构函数
  2. 调用成员变量析构函数(与成员声明顺序相反)
  3. 调整虚函数表指针值
  4. 调用基类析构函数(从右到左)
  5. 调用虚基类析构函数(从右到左)