虚拟构造函数

Virtual constructors

本文关键字:构造函数 虚拟      更新时间:2023-10-16

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

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

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

术语虚拟构造函数用于习语和众所周知的设计模式。这个习惯用法/模式涉及工厂的定义:一个具有虚拟方法的中间对象,其角色是创建有问题的对象。因为这个方法是虚拟的,它的目的是创建一个对象,所以它被戏称为"虚拟构造函数"

虽然可以模拟行为,但C++中没有虚拟构造函数。

为什么C++中没有虚拟构造函数
我试图给出一个推理:
该标准规定,直到构造函数的大括号结束,对象创建才完成。因此,只有在构造函数结束之后,对象才存在。

Virtual关键字用于实现多态行为,在实际调用的函数中,根据对象的实际类型,this在运行时进行评估。为了使用虚拟表机制调度构造函数,必须有一个完全存在的对象,该对象具有指向虚拟表的指针,但是在构造函数内部,对象构造本身并不完整,所以如果对象没有完全形成,那么指向虚拟表的指针怎么可能存在呢?

Bjarne Stroustrup博士的推理:

为什么我们没有虚拟构造函数

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