0

クラスヘッダーがあります:

class Game {
    static Game instance;
}

そして、インスタンス化時に「インスタンス」を「この」オブジェクトに設定したいのですが、それを機能させることができません。

これが私の実装です:

Game::Game() {
    Game::instance = this;
}

=Visual Studio は、 's 演算子に次のような赤い波線を表示します。

Error: no operator "=" matches these operands
operands are types are: Game = Game *

更新
エラーを理解できませんでしたが、割り当てコードを次のように変更してみました:

Game::instance = * this;

そしてエラーは消えました。

assignmentでは、これら 2 つのステートメントの違いは何だろうか。

私はある程度知っていると思います...しかし、説明はいいでしょう。

4

3 に答える 3

2

シングルトン パターンを使用しているようですね。いくつかの読み物を検索してください。気に入らない人もいますし、私も使ったことはありません。thisオブジェクトを作成するまで存在しないことに注意してください。また、使用=*thisするとコピーを作成することになるので注意してください。

プログラムの最初から利用できるようにしたい場合instanceは、おそらくクラスのグローバル インスタンスを宣言するだけでよいでしょう。その方が簡単で安全です。シングルトン パターンは、クラスの遅延インスタンス化またはオプションのインスタンス化が必要な場合に使用します。

于 2013-10-16T10:39:21.757 に答える
1

する必要があります

static Game* instance; // a pointer

instance新しく作成されたインスタンスを指すようになりました。

代わりにこれを行う場合:

Game::instance = *this;

instance新しいオブジェクトの現在の状態の「スナップショット」が割り当てられます。これはおそらくあなたが望むものではありません。

于 2013-10-16T10:25:39.437 に答える
0

instanceオブジェクトです。this現在のオブジェクトへのポインタです。を使用する* thisと、ポインターが逆参照されるため、ポインティー (= 現在のオブジェクト) が返されます。

于 2013-10-16T10:26:26.070 に答える