虚拟构造函数
Virtual constructors
我想知道虚拟构造函数的含义以及如何使用它。
此外,我知道C++不允许使用虚拟构造函数,我想知道为什么。
C++不允许使用虚拟构造函数,因为您首先需要一个对象来调用虚拟方法!
术语虚拟构造函数用于习语和众所周知的设计模式。这个习惯用法/模式涉及工厂的定义:一个具有虚拟方法的中间对象,其角色是创建有问题的对象。因为这个方法是虚拟的,它的目的是创建一个对象,所以它被戏称为"虚拟构造函数"
虽然可以模拟行为,但C++中没有虚拟构造函数。
为什么C++中没有虚拟构造函数
我试图给出一个推理:
该标准规定,直到构造函数的大括号结束,对象创建才完成。因此,只有在构造函数结束之后,对象才存在。
Virtual关键字用于实现多态行为,在实际调用的函数中,根据对象的实际类型,this
在运行时进行评估。为了使用虚拟表机制调度构造函数,必须有一个完全存在的对象,该对象具有指向虚拟表的指针,但是在构造函数内部,对象构造本身并不完整,所以如果对象没有完全形成,那么指向虚拟表的指针怎么可能存在呢?
Bjarne Stroustrup博士的推理:
为什么我们没有虚拟构造函数
虚拟构造函数完全解释由于虚拟构造函数或任何构造函数都是在创建对象后自动调用的,或者我们可以说它是保证在对象生命周期中运行的第一个函数。此外,当我们需要将基类指针绑定到派生类对象时,需要使用虚拟函数,这是通过在运行时实现的后期绑定来完成的,但构造函数在编译时是绑定的,以确认是否需要创建默认构造函数。此外,对于后期绑定,还需要在编译时不创建的虚拟指针。
- 虚拟继承基构造函数消除
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 我是否需要在虚拟继承类的构造函数中初始化基类以解决菱形继承问题?
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- 使用范围解析运算符时,在构造函数中调用虚拟方法是否安全?
- 虚拟继承构造函数的组装
- C++ 虚拟继承和构造函数
- 为什么不调用虚拟基非默认构造函数,除非大多数派生基显式调用它们?
- 抽象类和虚拟构造函数的替代方案
- C 构造函数订单,而虚拟继承
- (为什么)纯虚拟派生类中是否需要虚拟基类构造函数调用?
- 使用具有虚拟多重继承的基构造函数
- 在没有限定的情况下从 T 构造函数调用类 T 的纯虚拟实现?
- C 语言设计:孩子称呼所有虚拟祖先构造函数
- 虚拟继承和默认构造函数
- 具有虚拟多重继承的构造函数定义
- 构造函数尝试调用复制构造函数,虚拟继承
- 构造函数C++中的虚拟方法
- 模拟虚拟方法的构造函数
- 在C 中的多级虚拟继承中受保护的构造函数