【发布时间】:2012-01-20 08:56:32
【问题描述】:
在C++ tutorials in internet 之一中,我发现了以下关于为什么构造函数不能是虚拟的描述
我们不能声明一个虚拟构造函数。我们应该指定确切的 编译时对象的类型,以便编译器可以分配 特定类型的内存。
这个描述正确吗?
我对这句话感到特别困惑:so that the compiler can allocate
memory for that specific type。
【问题讨论】:
-
这个解释对了一半,一半是假的。构造函数不能是
virtual,因为它根本没有意义。 -
“以便编译器可以为该特定类型分配内存”或多或少是胡言乱语。我们必须在创建对象时指定类型,因为每个对象都有一个类型。 (当然,作为创建对象的一部分,必须根据该类型的大小分配一些内存;但这与指定对象的类型并不真正相关)。
-
@MikeSeymour :那么动态创建的对象呢?那么编译器是否还需要知道对象的类型?
-
@LinuxPenseur:是的,在 C++ 中,对象只能在编译时已知类型的情况下创建。对象只能由声明(包括类型)和新表达式(也包括类型)创建。
-
@LinuxPenseur:不,它是在编译时由程序员在声明或新表达式中指定的。 (例如
Thing t;或new Whatever)。编译器根据这个生成代码,分配合适的内存,调用正确的构造函数。
标签: c++ constructor virtual-functions