c ++ singleton, пример stackoverflows не работает - PullRequest
0 голосов
/ 19 ноября 2011

Я пытаюсь создать синглтон с 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 Ответ

6 голосов
/ 19 ноября 2011

Как вы на самом деле используете синглтон-класс?Предполагается, что вы получите ошибку компиляции при попытке вызвать конструктор копирования, поскольку единственный способ получить экземпляр синглтона должен быть через GetInstance.Возможно, вы забыли использовать ссылку в коде вызова:

GlobalInfo& gi = GlobalInfo::GetInstance();

Если вы забудете оператор &, вы фактически попытаетесь скопировать синглтон, что приведет к ошибке компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...