-2

ヒープスペースに割り当てられたメモリへのポインターのリストにイテレーター (iter) があるとします。

delete (*iter++)

優先順位は、最初にイテレータを逆参照してメモリアドレスを取得し、次にスペースを解放してから、イテレータをインクリメントして次の要素を解放することです。

4

4 に答える 4

4

++よりも優先順位が高いですが*、間接参照演算子が反復子の値を使用した後に、後置インクリメントの副作用++が適用されます。これがポストインクリメントまたはサフィックスの動作です(プリインクリメントまたはプレフィックスとは対照的に)。このルールは、反復子と「プレーン」ポインターに適用されます。*++++

于 2013-03-08T13:38:49.427 に答える
3

効果はあなたが書いたとおりですが、少し異なるシーケンスを使用して達成されます。

  1. ポストインクリメントは優先順位が最も高いため、最初に評価されます。ただし、その戻り値 (さらに演算子によって処理される) は、インクリメントiter 前の値です。

  2. 次に逆参照が評価され、インクリメントされていない値iterが「指している」ポインタが返されます。

  3. deleteが最後に評価され、ポインターが削除されます。

于 2013-03-08T13:42:08.673 に答える
1

優先順位は実際には逆であり、反復子がクラス型 (オーバーロードされた演算子を含む) である場合、これは演算子関数への呼び出しの順序です。

  • インクリメント演算子は、反復子をインクリメントするために呼び出されます。インクリメントのに自身のコピーを返します。
  • 逆参照演算子は一時イテレータで呼び出され、iter呼び出し先のリスト項目の値を返します。
  • 返されたポインタは削除されます。つまり、ポイント先のオブジェクトが破棄され、メモリが解放されます。
于 2013-03-08T13:45:49.587 に答える
0

この行は次と同等です。

delete (*(iter++))

しかし、後置インクリメントは元の値を返すため、元の値を逆参照していますiter。したがって、iter動的に割り当てられたオブジェクトへのポインタを指している場合、 はdeleteそのオブジェクトを破棄します。その後iter、次のポインターを指したままになります。

于 2013-03-08T13:40:53.900 に答える