c++单例,stackoverflows的例子不工作

c++ singleton, stackoverflows example does not work

本文关键字:工作 单例 stackoverflows c++      更新时间:2023-10-16

我正在尝试用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说:

includeGlobalInfo.h|12|error: 'GlobalInfo::GlobalInfo(const GlobalInfo&)' is private|

如果我删除

GlobalInfo(GlobalInfo const&);
GlobalInfo& operator=(GlobalInfo const&);

从头,我得到一个实际的副本的单例,这是不好的在这种情况下,因为我使用isFullScreen保存信息取决于用户输入。

如何实际使用单例类?当你试图调用复制构造函数时,你应该得到一个编译错误,因为获得单例实例的唯一方法应该是通过GetInstance。也许您忘记在调用代码中使用引用:

GlobalInfo& gi = GlobalInfo::GetInstance();

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