簡體   English   中英

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(=當前對象)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM