C++のコーディングを行ってからしばらくして、基本リンクリストのどの変数がデストラクタで削除されるべきか不思議でした。私のC++のハンドブックは現時点で問題について相談していません。次のようにリンクリストクラスが見えます:クラスのデストラクタですべて削除する必要があるもの
#include <string>
#include <vector>
class Node
{
Node *next;
string sName;
vector<char> cvStuff;
Node(string _s, int _i)
{
next = nullptr;
sName = _s;
for (int i = 0; i < _i; i++)
{
cvStuff.insert(cvStuff.end(), '_');
}
}
~Node()
{
//since sName is assigned during runtime do I delete?
//same for cvStuff?
}
};
私は
delete next;
呼び出すデストラクタでそれがリンクリストの次のノードに移動し、そのノードを削除します場合、私は、また好奇心としたがってその種の再帰的にその点からリスト全体を削除する?また、それが事実であり、何らかの理由でそれを実装することを選択した場合、削除する前にnextがnullptrであるかどうかを確認する必要がありますか、それとも違いはありませんか?
ありがとうございます。
これは、ListNodeとListの両方であることを試みます。誰がリストを所有していますか?あなたが同じものであればリストの末尾を共有しますか?要素を削除するか、リスト全体を削除する予定ですか? – lorro
@lorro、はいこれは技術的にノードクラスであり、それに応じて調整されています。共有テールを定義しますか?また、リスト全体を削除してください。この場合は –
を削除しないでください!そうしないと、リストの任意の要素を消去するクイック消去を書き込むことができなくなります。フォワードリンクリストの末尾を共有するということは、2つのリストが同じ要素を背表に持つ必要があることを考えれば、ノードを共有するということです。一度構築されconstになるリストで非常に便利です。 – lorro