虚拟构造函数

时间:2011-06-11 15:34:09

标签: c++ oop constructor polymorphism virtual

我想知道虚构造函数的含义是什么以及如何使用它。

另外我知道C ++不允许虚拟构造函数,我想知道为什么。

4 个答案:

答案 0 :(得分:10)

C ++中没有虚拟构造函数,但可以simulate the behavior

为什么C ++中没有虚拟构造函数?
我尝试推理:
该标准规定在构造函数的右括号之前,对象创建不完整。因此,对象仅在构造函数结束后存在。

虚拟关键字用于实现多态行为,其中在运行时评估要调用的实际函数,具体取决于this指向的实际对象类型。为了使用虚拟表机制调度构造函数,必须有一个完全存在的对象,其中有一个指向虚拟表的指针,但在构造函数内部,对象构造本身并不完整,因此如何指向虚拟表如果对象没有完全形成,是否存在?

Bjarne Stroustrup博士的推理:

Why don't we have virtual constructors?

答案 1 :(得分:10)

C ++不允许虚拟构造函数,因为你需要一个对象来调用虚拟方法!

术语虚拟构造函数用于idiom和众所周知的design pattern。这个习语/模式涉及 factory 的定义:一个具有虚拟方法的中间对象,其角色是创建有问题的对象。因为该方法是虚拟的,其目的是创建一个对象,所以它被称为“虚拟构造函数”。

答案 2 :(得分:1)

答案 3 :(得分:-3)

Virtual constructor Fully Explained 由于虚拟构造函数或任何构造函数在对象创建后立即自动调用,或者我们可以说它是保证在对象生命周期中运行的第一个函数。当我们需要将基类指针绑定到派生类对象时也需要虚拟函数,这是通过在运行时实现的后期绑定完成的,但在编译时绑定构造函数以确认需要创建默认构造函数与否。此外,对于后期绑定,需要不是在编译时创建的虚拟指针。