我想知道虚构造函数的含义是什么以及如何使用它。
另外我知道C ++不允许虚拟构造函数,我想知道为什么。
答案 0 :(得分:10)
C ++中没有虚拟构造函数,但可以simulate the behavior。
为什么C ++中没有虚拟构造函数?
我尝试推理:
该标准规定在构造函数的右括号之前,对象创建不完整。因此,对象仅在构造函数结束后存在。
虚拟关键字用于实现多态行为,其中在运行时评估要调用的实际函数,具体取决于this
指向的实际对象类型。为了使用虚拟表机制调度构造函数,必须有一个完全存在的对象,其中有一个指向虚拟表的指针,但在构造函数内部,对象构造本身并不完整,因此如何指向虚拟表如果对象没有完全形成,是否存在?
Bjarne Stroustrup博士的推理:
答案 1 :(得分:10)
C ++不允许虚拟构造函数,因为你需要一个对象来调用虚拟方法!
术语虚拟构造函数用于idiom和众所周知的design pattern。这个习语/模式涉及 factory 的定义:一个具有虚拟方法的中间对象,其角色是创建有问题的对象。因为该方法是虚拟的,其目的是创建一个对象,所以它被称为“虚拟构造函数”。
答案 2 :(得分:1)
答案 3 :(得分:-3)
Virtual constructor Fully Explained 由于虚拟构造函数或任何构造函数在对象创建后立即自动调用,或者我们可以说它是保证在对象生命周期中运行的第一个函数。当我们需要将基类指针绑定到派生类对象时也需要虚拟函数,这是通过在运行时实现的后期绑定完成的,但在编译时绑定构造函数以确认需要创建默认构造函数与否。此外,对于后期绑定,需要不是在编译时创建的虚拟指针。