0

我有一些类,一个字段是一个静态指针 - 假设它是一个记录器,所以我希望它被初始化并且对于这个类的所有实例都是相同的。

class A
{
private:
static Logger* logger;
};

而且这个记录器将从dll初始化,所以它的初始化是一个函数,我不能只写new或make_unique之类的。我的问题是如何更好地组织这个以及在哪里初始化这个记录器?我应该Logger * initLogger()作为静态方法添加到类中并在构造函数中调用它

A::A() {
    if (!logger)
    logger = initLogger();
}

或者,也许我最好在 cpp 文件中创建这个记录器静态变量,但是我又遇到了何时调用它的初始化函数的问题。或者为单例的记录器编写新类?我认为这是非常标准的情况,所以应该有一些最好的方法?

4

1 回答 1

1

一个更好的方法是让它成为一个函数作用域的静态变量,保证只初始化一次:

Logger* getLogger() {
  static auto* logger = initLogger(); // done once
  return logger;
}
于 2021-03-01T15:06:14.573 回答