C++ 静态成员变量

C++ Static member variables

本文关键字:变量 静态成员 C++      更新时间:2023-10-16

我有一个类头:

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陈述有什么区别?

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

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

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

应该是

static Game* instance; // a pointer

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

如果您改为这样做:

Game::instance = *this;

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

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