doc*_*doc 3 c++ constructor initialization static-variables
我想做什么:每当要在程序中使用类的实例时运行一些先决条件代码.此代码将检查要求等,并且只应运行一次.
我发现这可以使用另一个对象作为构造函数内的静态变量来实现.这是一个更好的图片示例:
class Prerequisites
{
public:
Prerequisites() {
std::cout << "checking requirements of C, ";
std::cout << "registering C in dictionary, etc." << std::endl;
}
};
class C
{
public:
C() {
static Prerequisites prerequisites;
std::cout << "normal initialization of C object" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
困扰我的是,到目前为止我还没有看到类似的静态变量.是否有任何缺点或副作用或我遗失了什么?或者也许有更好的解决方案?欢迎任何建议.
这不是线程安全的,因为如果两个线程同时第一次尝试构造C,则先决条件可能会初始化两次.
如果你对此没问题,你可以做到这一点,虽然游戏范围内的构造函数系统没有可发现性(即一旦你忘记了'技巧'或其他人试图阅读你的代码,他们会感到困惑的是发生了什么).