我是否需要单例类中的静态变量?

时间:2015-01-26 14:42:23

标签: c++ singleton

采取以下代码。如果我要将一些私有成员数据添加到这个类中,比如说std :: vector,我会将它设为静态吗?

#include <string>

class Logger{
public:
   static Logger* Instance();
   bool openLogFile(std::string logFile);
   void writeToLogFile();
   bool closeLogFile();

private:
   Logger(){};  // Private so that it can  not be called
   Logger(Logger const&){};             // copy constructor is private
   Logger& operator=(Logger const&){};  // assignment operator is private
   static Logger* m_pInstance;
};

**代码示例无耻地从here

获取

2 个答案:

答案 0 :(得分:3)

惯用,不。除此之外,没有什么能阻止你这样做。

请记住,如果它是static,则需要定义它,并在程序启动时进入main之前初始化成员。

如果它不是static,它将在创建m_pInstance时初始化(如果您需要一些延迟初始化,这将非常有用)。

答案 1 :(得分:0)

最大的问题是初始化顺序。在C ++中,单身成语 通常用于解决初始化问题的顺序,因此 可能是一个问题:如果成员是静态的,你无法确定 它们是在你尝试使用它们之前构建的。