文章目录
前言
C++ Core Guidelines 的 C.50 条目,给出了一个使用工厂函数的场景:
如果在基类的构造函数中,想要调用虚函数,则不应该把虚函数直接放到构造函数中,而是应该改用 factory function 工厂函数的方案,并把虚函数从构造函数转移到工厂函数中。
原文如下:
C.50: Use a factory function if you need “virtual behavior” during initialization
Reason: If the state of a base class object must depend on the state of a derived part of the object, we need to use a virtual function (or equivalent) while minimizing the window of opportunity to misuse an imperfectly constructed object.
工厂函数:即专门生产某种东西的函数,因此被叫做工厂。
C++ Core Guidelines 的 C.50 链接如下:
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c50-use-a-factory-function-if-you-need-virtual-behavior-during-initialization
1. 错误用法的示例
下面代码展示错误的用法,即在构造函数中直接调用了虚函数。这种方式将无法调用派生类 override 之后的虚函数,只能调用基类的虚函数。
// 错误用法的示例。
#include <iostream>
#include <memory>
class BaseWrong {
public:
BaseWrong() {
// 基类构造函数调用虚函数
logCreation(); // ❌ 实际调用 BaseWrong::logCreation()
}
virtual void logCreation() const {
// 用于记录派生类的创建,以及状态值。
std::cout << "基类对象已创建。\n"

最低0.47元/天 解锁文章
1059

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



