构造函数中的静态变量,有任何缺点或副作用吗?

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)

困扰我的是,到目前为止我还没有看到类似的静态变量.是否有任何缺点或副作用或我遗失了什么?或者也许有更好的解决方案?欢迎任何建议.

Ana*_*tts 6

这不是线程安全的,因为如果两个线程同时第一次尝试构造C,则先决条件可能会初始化两次.

如果你对此没问题,你可以做到这一点,虽然游戏范围内的构造函数系统没有可发现性(即一旦你忘记了'技巧'或其他人试图阅读你的代码,他们会感到困惑的是发生了什么).