C ++ Статические переменные-члены

0

У меня есть заголовок класса:

class Game {
    static Game instance;
}

И я хочу установить "экземпляр" для "этого" объекта при создании экземпляра, но не могу заставить его работать.

Здесь моя реализация:

Game::Game() {
    Game::instance = this;
}

Visual Studio дает красную игрушечную вещь на операторе = говоря:

Error: no operator "=" matches these operands
operands are types are: Game = Game *

Обновить
Я не понял ошибку, но я попытался изменить код назначения на это:

Game::instance = * this;

И ошибка исчезла.

Итак, теперь мне интересно, в чем разница между этими двумя утверждениями assignment?

Я думаю, что я знаю... но объяснение было бы неплохо.

Теги:
pointers
reference

3 ответа

2

Похоже, вы идете за одноэлементным узором! Найдите его для чтения. Некоторым людям это не нравится, и я никогда не использовал их, но если вы этого хотите, вам понадобится больше рамок, чем у вас. Обратите внимание: this не существует, пока вы не создали объект. Также будьте осторожны, если вы используете =*this вы сделаете копию.

Если вы хотите, чтобы ваш instance был доступен с самого начала программы, вы, возможно, должны просто объявить глобальный экземпляр класса, это проще и безопаснее. Шаблон singleton предназначен для тех случаев, когда требуется замедленное создание экземпляра или дополнительный экземпляр вашего класса.

1

Должно быть

static Game* instance; // a pointer

Теперь instance указывает на вновь созданный экземпляр.

Если вы сделаете это:

Game::instance = *this;

instance присваивается "моментальный снимок" текущего состояния нового объекта. Это, вероятно, не то, что вы хотите.

0

instance - объект. this указатель на текущий объект. Используя * this, вы разыменовываете свой указатель, следовательно, возвращаете pointee (= текущий объект)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню