我正在尝试用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&);
从标题中,我得到了单例的实际副本,这在这种情况下很糟糕,因为我使用isFullScreen来保存信息,具体取决于用户输入。
答案 0 :(得分:6)
你如何实际使用单身人士课程?在尝试调用复制构造函数时,您应该会收到编译错误,因为获取单例实例的唯一方法应该是通过GetInstance。也许你忘了在调用代码中使用引用:
GlobalInfo& gi = GlobalInfo::GetInstance();
如果你忘了&amp;运算符,您将有效地尝试复制单例,这正确导致编译错误。