c++ - 析构函数和继承函数 c++

标签 c++ inheritance destructor

如果我有两个这样的类:

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/

相关文章:

c++ - XCode 项目无法识别某些 GLUT 命令

java - 将整个 C++ 应用程序包装到 java?

c++ - 如何定义和测试字符串值的宏?

linux - 如果函数是虚拟的,dlclose() 静态析构函数在不同时间运行

c++ - 销毁返回对象

c++ - 如何将机器人移动一定距离并仍然管理传感器?

ios - 从 Swift 调用 Objective C 自定义初始化函数

c++ - 我怎样才能在基类中成为派生类函数的 friend ?

c# 字段永远不会分配给并且将始终具有其默认值 null?

c++ - 使用 "delete this"删除当前对象是否可以?