[英]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(=當前對象)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.