C ++静态成员变量

时间:2013-10-16 10:23:28

标签: c++ pointers reference

我有一个班级标题:

class Game {
    static Game instance;
}

我想在实例化时将'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陈述有什么区别?

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

3 个答案:

答案 0 :(得分:2)

听起来你正在寻找单身人士模式!搜索一些阅读。有些人不喜欢它,我从来没有使用它,但如果你想要它,那么你需要更多的框架而不是你拥有它。请注意,在创建对象之前,this不存在。另外要小心,如果你使用=*this,你将会复制。

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

答案 1 :(得分:1)

应该是

static Game* instance; // a pointer

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

如果您改为这样做:

Game::instance = *this;

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

答案 2 :(得分:0)

instance是一个对象。 this是指向当前Object的指针。通过使用* this,您将取消引用指针,从而返回指针对象(=当前对象)