构造函数不能是虚拟的

nit*_*ian 5 c++ constructor virtual-functions

Internet上的一个C++教程中,我发现了以下关于构造函数不能为虚拟的原因

我们不能声明虚构造函数.我们应该在编译时指定对象的确切类型,以便编译器可以为该特定类型分配内存.

这种描述是否正确?

我特别对这句话感到困惑:so that the compiler can allocate memory for that specific type.

Alo*_*ave 19

正如Bjarne自己在这里解释的那样

虚拟调用是一种在给定部分信息的情况下完成工作的机制.特别是,"virtual"允许我们调用只知道接口而不是对象的确切类型的函数.要创建对象,您需要完整的信息.特别是,您需要知道要创建的内容的确切类型.因此,"对构造函数的调用"不能是虚拟的.

  • @LinuxPenseur:当动态创建对象时,编译器仍然需要知道对象的大小.为此,它需要知道实际类型. (2认同)
  • @LinuxPenseur:我百分百肯定.这就是为什么你不能创建一个不完整类型的实例(例如一个前向声明的类) - 既不是静态也不是动态的. (2认同)
  • @LinuxPenseur:当然可以!如何为对象分配足够的内存,它不知道对象的大小? (2认同)