我有一个班级标题:
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
陈述有什么区别?
我想我有点知道......但是解释会很好。
答案 0 :(得分:2)
听起来你正在寻找单身人士模式!搜索一些阅读。有些人不喜欢它,我从来没有使用它,但如果你想要它,那么你需要更多的框架而不是你拥有它。请注意,在创建对象之前,this
不存在。另外要小心,如果你使用=*this
,你将会复制。
如果您希望从程序开始就可以使用instance
,那么您可能应该只声明该类的全局实例,它更容易,更安全。单例模式适用于您希望延迟实例化或类的可选实例化。
答案 1 :(得分:1)
应该是
static Game* instance; // a pointer
现在instance
指向新创建的实例。
如果您改为这样做:
Game::instance = *this;
instance
被分配了新对象当前状态的“快照”。这可能不是你想要的。
答案 2 :(得分:0)
instance
是一个对象。 this
是指向当前Object的指针。通过使用* this
,您将取消引用指针,从而返回指针对象(=当前对象)