C++ 虚拟构造函数与工厂模式解析
1. 虚拟构造函数的不可能性
在 C++ 中,除了构造函数外,任何类的成员函数(包括析构函数)都可以声明为虚函数。这是因为在编译时,构造函数调用点就必须明确知道要构造的对象类型。
1.1 对象类型的确定时机
- 在对象构造之前,只有未初始化的内存,不存在该类型的对象。而虚函数调用依赖于 v - 指针来确定对象的真实类型,v - 指针只能在对象构造过程中初始化,构造前未初始化的 v - 指针无法用于分派虚函数调用,所以构造函数不能是虚函数。
- 对于派生类,类型的确定过程更为复杂。可以使用
typeid运算符观察对象构造过程中的类型变化:
#include <iostream>
#include <typeinfo>
using std::cout;
using std::endl;
template <typename T>
auto type(T&& t) { return typeid(t).name(); }
class A {
public:
A() { cout << "A::A(): " << type(*this) << endl; }
virtual
~A() { cout << "A::~A(): " << type(*this) << endl; }
};
class B : public A {
public:
B(
超级会员免费看
订阅专栏 解锁全文
766

被折叠的 条评论
为什么被折叠?



