C++ 静态成员变量
C++ Static member variables
我有一个类头:
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(= 当前对象)
相关文章:
- C++:是否可以使用非静态成员变量模板?
- 如何在复杂继承中访问静态成员变量
- 静态成员变量不会由 gettext 转换
- 未使用的C++未优化的静态成员函数/变量
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- C++ lambda - 捕获静态成员变量
- 多线程处理中的静态成员变量
- 纯标头库中静态成员变量的正确设置器和 getter
- 如何从具有专用化的类模板定义静态成员变量?
- 从静态成员函数访问私有非静态类变量 - C++
- 静态变量与静态成员
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 声明和定义类静态成员变量不会导致多重声明,这是为什么?
- 为什么不允许静态成员变量的初始化在类中,而允许静态静态成员的初始化
- 类中的静态成员变量和C++中的全局变量有什么区别?
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- C++ 静态成员变量 - 文件之间的访问
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何在运行时使用静态成员函数初始化静态成员变量
- 如何在类静态成员中引用静态变量?