为什么 C++ 中没有虚构造函数?


只有在将基类指针指向派生类对象时,虚拟机制才知道。

在 C++ 中,构造函数不能是虚拟的,因为在执行类的构造函数时,内存中没有虚拟表,这意味着尚未定义虚拟指针。因此,构造函数应始终是非虚拟的。

但是虚拟析构函数是可能的。下面是一个例子

示例

#include<iostream>
using namespace std;
class b {
   public:
   b()
   { cout<<"Constructing base \n"; }
   virtual ~b()
   { cout<<"Destructing base \n"; }
};
class d: public b {
   public:
      d()
      { cout<<"Constructing derived \n"; }
      ~d()
      { cout<<"Destructing derived \n"; }
};
int main(void) {
   d *derived = new d();
   b *bptr = derived;
   delete bptr;
   return 0;
}

输出

Constructing base
Constructing derived
Destructing derived
Destructing base


更新于: 2019 年 7 月 30 日

3 千+ 浏览

开启你的职业生涯

通过完成课程获得认证

开始
广告