如果我有两个这样的类:
class A
{
public:
virtual print(){};
~A(){print();}
};
class B:public A
{
public:
print(){};
~B(){}
};
void main()
{
B *b1=new B;
delete b1;
}
在 A 类的析构函数中,它是否从 A 类而不是 B 调用打印,因为当它在 A 类析构函数中时,B 类在技术上被破坏了?
最佳答案
是的,没错。通过调用自身的析构函数来销毁类,然后调用其父类的析构函数,这意味着当你销毁 A 时,B 已经消失了。如果您在构造时调用基类中的虚函数和重写函数,您会看到类似的行为。
在构造函数或析构函数中调用虚函数通常被认为是不好的做法,因为这种行为虽然定义明确,但可能会误导外行。即使您已经开始,也很容易绊倒自己。
关于c++ - 析构函数和继承函数 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19213204/