この割り当ての使用:
Node **array1 = new Node*[n];
array1の内容は未定義です。各要素はでNode*
あり、メモリは初期化されていないため、値は何でもかまいません。
ポインタの配列を割り当てても、ポイント先のクラスのオブジェクトは作成されません。
したがって、配列に配置するポインターが何であれ、それらが指すオブジェクトは、他の場所で構築および破棄する必要があります。
だからあなたの質問に答えるために、array1を削除する適切な方法は
delete[] array1;
ただし、これによってデストラクタが呼び出されることはないことに注意してください。配列を削除する前Node*
に、配列に入れたものをすべて処理する必要があります。
編集:あなたの例で割り当てられた有効な値が 配列にあるかのように、配列の「値を変更する」という元の質問に混乱しました。
しかし...後で削除するためにポインターを追跡したいということを理解したので、おそらく、各ポインターが1回だけ存在する、その目的のために別の配列を作成することができます。したがって、現在上にある配列があります。この配列には、使用している目的に関係なく、繰り返される可能性のあるノードへのポインターが含まれています。次に、削除を管理するという明確な目的のための別の配列があり、各ポインターは1回だけ発生します。nodeCleanupArray[i] = pNewNode
直後のようなものを設定するのは簡単なはずです。そうすれば、線形時間と各要素pNewNode = new Node()
でその配列を爆破できます。delete
(つまり、array1の要素をわざわざ検査する必要はなく、クリーンアップにはnodeCleanupArrayを使用します)