采取以下代码。如果我要将一些私有成员数据添加到这个类中,比如说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
获取答案 0 :(得分:3)
惯用,不。除此之外,没有什么能阻止你这样做。
请记住,如果它是static
,则需要定义它,并在程序启动时进入main
之前初始化成员。
如果它不是static
,它将在创建m_pInstance
时初始化(如果您需要一些延迟初始化,这将非常有用)。
答案 1 :(得分:0)
最大的问题是初始化顺序。在C ++中,单身成语 通常用于解决初始化问题的顺序,因此 可能是一个问题:如果成员是静态的,你无法确定 它们是在你尝试使用它们之前构建的。