1

学習目的で、二重リンク リストの独自の実装を作成しました。メモリが正しく割り当て解除されていることを確認するためにいくつかのテストを行っています。にはmain.cpp、次のものがあります。

list<int> pointer;
int *x = new int(1);
int *y = new int(2);
int *z = new int(3);
pointer.insertBack(*x);
pointer.insertBack(*y);
pointer.insertBack(*z);
pointer.printForward();
pointer.printReverse();

への呼び出しのため、明らかにメモリが割り当てられていますnew。そのコードのすべての後に自分で削除を呼び出す必要がありますか、それともリストのデストラクタがメモリの割り当て解除を処理する必要がありますか? ポインタの代わりに を使用するintと、メモリ リークは見つかりません。valgrind を使用してメモリリークをチェックしています。

4

1 に答える 1

2

リストにデータへのポインターを保存する場合、そのデータを自分で削除する必要があります。リストはそれを行いません (またはすべきではありません)。
これを行う最善の方法は、データを取得して使用し、同じ関数で削除することです。

また、リンク リストの実装によっては、リスト内の各ノードで使用されているメモリを内部的に削除する必要がある場合があります。

リストの削除について話している場合、データが必要ない場合は、リストを削除する前にデータを削除する必要があります。

于 2013-05-21T23:11:45.077 に答える