3

私は(かなり尊敬されている)本でこのコードに出くわしました。(注: 「head」は Element 型のポインタです)

Stack::~Stack(){
  while(head){
    Element *next = head->next;
    delete head;
    head = next;
   }
    return;
}

私の理解では、delete キーワードは、ポインターに割り当てられたメモリの割り当てを解除します。作成者が割り当てを解除した直後に、次の行でポインターを使用したのはなぜですか? これは私を少し混乱させました。本当に明らかな何かが欠けていますか?

4

2 に答える 2

10

作成者が割り当てを解除した直後に、次の行でポインターを使用したのはなぜですか?

作成者は、ポインターを次の要素に再割り当てしています。

head が指すメモリの割り当てを解除してdeleteいます。ポインター自体を「割り当て解除」するわけではありません。ポインターは引き続き存在し、使用可能です。

head = next次にheadのメモリ チャンク ( が指すチャンク) を指しnextます。削除されたメモリは二度と使用されないため、問題はありません。

于 2013-07-12T21:06:39.223 に答える
1

良い質問。類推: 上司は昨日ボブを解雇しました。今日、ボブのデスクに誰かがいるのはどうしてですか?

紛らわしいのは、類推すると、C++ 構文は実際にはボブのデスクの従業員を削除することを意味しますが、デスクを取り除くわけではありませんdelete Bob;delete Bobs_desk;

ボブが片付けたら、ボスは自由にボブのデスクに他の人を座らせることができます。フォローしますか?

于 2013-07-12T21:11:45.353 に答える