c ++ singleton,stackoverflows示例不起作用

时间:2011-11-19 11:08:04

标签: c++ singleton

我正在尝试用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来保存信息,具体取决于用户输入。

1 个答案:

答案 0 :(得分:6)

你如何实际使用单身人士课程?在尝试调用复制构造函数时,您应该会收到编译错误,因为获取单例实例的唯一方法应该是通过GetInstance。也许你忘了在调用代码中使用引用:

GlobalInfo& gi = GlobalInfo::GetInstance();

如果你忘了&amp;运算符,您将有效地尝试复制单例,这正确导致编译错误。