0

我有一个类头:

class Game {
    static Game instance;
}

而且我想在实例化时将“实例”设置为“this”对象,但无法使其正常工作。

这是我的实现:

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

=Visual Studio 在' 运算符上给出了一个红色波浪状的东西:

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

更新
我不明白错误,但我尝试将分配代码更改为:

Game::instance = * this;

错误消失了。

所以,现在我想知道,这两个assignment语句之间有什么区别?

我想我知道...但是解释会很好。

4

3 回答 3

2

听起来你要选择单例模式!搜索一些阅读。有些人不喜欢它,我从来没有用过它,但如果你想要它,那么你将需要比你拥有的更多的框架。请注意,this在您创建对象之前不存在。还要小心,如果您使用,=*this您将制作副本。

如果您希望您instance从程序开始就可用,那么您可能应该只声明该类的全局实例,它更容易和更安全。单例模式适用于您想要延迟实例化或可选实例化类的情况。

于 2013-10-16T10:39:21.757 回答
1

应该

static Game* instance; // a pointer

现在instance指向新创建的实例。

如果您改为这样做:

Game::instance = *this;

instance被分配了新对象当前状态的“快照”。这可能不是你想要的。

于 2013-10-16T10:25:39.437 回答
0

instance是一个对象。this是指向您当前对象的指针。通过使用* this,您正在取消引用您的指针,因此返回指针(= 当前对象)

于 2013-10-16T10:26:26.070 回答