如何最佳实践延迟初始化类 C
的私有成员变量 M
?例如:
class C {
public:
C();
// This works properly without m, and maybe called at any time,
// even before startWork was called.
someSimpleStuff();
// Called single time, once param is known and work can be started.
startWork(int param);
// Uses m. Called multiple times.
// Guaranteed to only be called after startWork was called
doProcessing();
private:
M m;
};
class M {
M(int param);
};
由于 M
没有默认的初始化程序,因此无法构造类 C
的对象。
如果您可以修改 M
的实现,则可以向 M
添加一个 init
方法,并使其构造函数不接受任何参数,这将允许构造类 C
的对象。
如果不能修改,则可以使用 std::unique_ptr
将 C
的成员 m
包装起来,并在可能的情况下进行构造。
然而,这两种解决方案都容易出现运行时错误。是否有某种方法可以确保在编译时之前,m
只能在初始化后使用?
限制:类 C 的对象被传递给外部代码,该代码利用其公共接口,因此无法将 C 的公共方法拆分为多个类。
m
是否需要成为一个成员?从你的示例代码中看来,每次想在C
中进行一些“工作”时都要传递param
。 - Simon Kraemer