我正在尝试用 gcc 做一个单例
我在 stackoverflow 上找到了几个示例,不幸的是它们对我不起作用。
这是我的 .h 文件:
#ifndef GLOBALINFO_H
#define GLOBALINFO_H
#include <string>
#include <iostream>
using namespace std;
class GlobalInfo
{
private:
GlobalInfo();
GlobalInfo(GlobalInfo const&);
GlobalInfo& operator=(GlobalInfo const&);
public:
static GlobalInfo& GetInstance();
virtual ~GlobalInfo();
bool isFullScreen;
int screenWidth;
int screenHeight;
string title;
protected:
};
#endif // GLOBALINFO_H
这是我的.cpp:
#include "GlobalInfo.h"
GlobalInfo::GlobalInfo()
{
isFullScreen = false;
screenWidth = 800;
screenHeight = 600;
cout << "creating GlobalInfo" << endl;
}
GlobalInfo::~GlobalInfo()
{
}
GlobalInfo &GlobalInfo::GetInstance() {
static GlobalInfo instance;
return instance;
}
GNU C 说:
include\GlobalInfo.h|12|error: 'GlobalInfo::GlobalInfo(const GlobalInfo&)' is private|
如果我删除
GlobalInfo(GlobalInfo const&);
GlobalInfo& operator=(GlobalInfo const&);
从 header 中,我得到了单例的实际拷贝,这在这种情况下很糟糕,因为我使用 isFullScreen 来保存取决于用户输入的信息。
你实际上是如何使用单例类的?尝试调用复制构造函数时应该会出现编译错误,因为获取单例实例的唯一方法应该是通过 GetInstance。也许您忘记了在调用代码中使用引用:
GlobalInfo& gi = GlobalInfo::GetInstance();
如果您忘记了 & 运算符,您实际上是在尝试复制单例,这会正确地导致编译错误。
我是一名优秀的程序员,十分优秀!