【发布时间】:2022-07-01 00:33:30
【问题描述】:
我正在使用指向派生类的指针进行一些练习,当我运行下面提供的代码时,我得到的输出是
Constructor A
Constructor B
Destructor A
有人能告诉我为什么 B::~B() 没有在这里被调用吗?
class A {
public:
A() { std::cout << "Constructor A\n"; }
~A() { std::cout << "Destructor A\n"; }
};
class B : public A {
public:
B() { std::cout << "Constructor B\n"; }
~B() { std::cout << "Destructor B\n"; }
};
int main() {
A* a = new B;
delete a;
}
【问题讨论】:
-
如果函数不是
virtual,则不能通过多态调用。B和A的析构函数不是虚拟的 -
因为您在
A*上调用delete,而不是B*,并且A*的析构函数不是virtual。结果,程序具有未定义的行为,因为对象的最衍生类型实际上是B,而不是A。
标签: c++ class inheritance declaration destructor