ヒープスペースに割り当てられたメモリへのポインターのリストにイテレーター (iter) があるとします。
delete (*iter++)
優先順位は、最初にイテレータを逆参照してメモリアドレスを取得し、次にスペースを解放してから、イテレータをインクリメントして次の要素を解放することです。
ヒープスペースに割り当てられたメモリへのポインターのリストにイテレーター (iter) があるとします。
delete (*iter++)
優先順位は、最初にイテレータを逆参照してメモリアドレスを取得し、次にスペースを解放してから、イテレータをインクリメントして次の要素を解放することです。
++
よりも優先順位が高いですが*
、間接参照演算子が反復子の値を使用した後に、後置インクリメントの副作用++
が適用されます。これがポストインクリメントまたはサフィックスの動作です(プリインクリメントまたはプレフィックスとは対照的に)。このルールは、反復子と「プレーン」ポインターに適用されます。*
++
++
効果はあなたが書いたとおりですが、少し異なるシーケンスを使用して達成されます。
ポストインクリメントは優先順位が最も高いため、最初に評価されます。ただし、その戻り値 (さらに演算子によって処理される) は、インクリメントiter
前の値です。
次に逆参照が評価され、インクリメントされていない値iter
が「指している」ポインタが返されます。
delete
が最後に評価され、ポインターが削除されます。
優先順位は実際には逆であり、反復子がクラス型 (オーバーロードされた演算子を含む) である場合、これは演算子関数への呼び出しの順序です。
iter
呼び出し先のリスト項目の値を返します。この行は次と同等です。
delete (*(iter++))
しかし、後置インクリメントは元の値を返すため、元の値を逆参照していますiter
。したがって、iter
動的に割り当てられたオブジェクトへのポインタを指している場合、 はdelete
そのオブジェクトを破棄します。その後iter
、次のポインターを指したままになります。