2

重複の可能性:
「new」を使用するとメモリリークが発生するのはなぜですか?

違いは何ですか(ある場合):

   Player player=*(new Player()); 

と:

   Player &player=*(new Player());

どちらも(そう思われますが)同じように動作しますが、私は確かに何かが恋しいですか?!?

4

2 に答える 2

4

違いは、最初のコピーが作成されるのに対し、2番目のコピーは。によって返されるポインタが指すオブジェクトへの参照を作成することnew Player()です。

Player player=*(new Player()); 

playercopy- copy-constructorを使用して初期化します。

Player &player=*(new Player());

のエイリアスを作成するだけです。これは一時的なものではない*(new Player())ため有効です。そのため違法になります。new Player()Player& player = Player()

彼らは両方とも吸うという点で同じです。

于 2012-11-12T21:00:09.403 に答える
2

new Player()いわゆるヒープ上にオブジェクト (名前なし) を作成する式です。式の結果は、新しく作成されたオブジェクトへのポインターです。今あなたがするとき

Player player = *(new Player())

新しく作成されたオブジェクトのコピーである player という名前の変数を定義します。さらに、ヒープ オブジェクトへのすべてのハンドル (アクセス) が失われ、ヒープ オブジェクトが占有するメモリを解放することはできません。

一方で、

Player &player=*(new Player());

新しく作成されたオブジェクトへの player という名前の参照を作成します。したがって、そのオブジェクトにアクセスできます。特に、次の方法でメモリを解放し、そのオブジェクトを破棄できます。

delete &player;
于 2012-11-12T21:01:32.160 に答える