面试题:C++中构造函数与析构函数调用顺序在复杂继承与多态场景下的表现
考虑以下C++代码:
```cpp
class Base {
public:
Base() { std::cout << "Base constructor" << std::endl; }
virtual ~Base() { std::cout << "Base destructor" << std::endl; }
};
class Derived1 : public Base {
public:
Derived1() { std::cout << "Derived1 constructor" << std::endl; }
~Derived1() { std::cout << "Derived1 destructor" << std::endl; }
};
class Derived2 : public Derived1 {
public:
Derived2() { std::cout << "Derived2 constructor" << std::endl; }
~Derived2() { std::cout << "Derived2 destructor" << std::endl; }
};
```
如果有代码 `Base* ptr = new Derived2(); delete ptr;`,输出结果是什么,解释为什么会是这样的输出顺序,特别是析构函数的调用顺序有什么特点,这种顺序在实际编程中有什么意义。