クラスプロジェクトのリンクリストを作成しようとしています。私のノードクラスには、リンクされたノードを指すポインタと、特殊なブッククラスを指す別のポインタがあります。デストラクタが呼び出されたときに、クラスのインスタンスへのポインタをnullptrに設定することはできますか?
class Node{
private:
Book *data;
Node *linkedLink;
public:
Node(Book *inputedData);
Book* getBook();
Node* getLinked();
void changeLinked(Node *newLink);
Node& operator=(const Node& rhs);
~Node(); //deconstructor
};
私の教授は、我々が変更することはできませんドライバを提供してきました。このドライバでは、彼は次のコードを持っています
// (bookList is an instance of my LinkedList class)
// (and getFirst() returns my LinkedList's head node)
while (bookList.getFirst() != nullptr)
{
Node * t = partsList.pop_front();
delete t;
}
次は私のノードクラスのデストラクタです:
Node::~Node(){
delete data; //this deletes the book class that data points to.
delete linkedLink;
}
問題は、私はのインスタンスを指す変数(t)を必要とする、ありますノードクラスは、に設定され、完了後に*data
と*linkedLink
が解放されます。しかし、私は私の教授のドライバを変更することはできません。つまり、私はこれをNodeクラスのデストラクタで行う必要があります。私はこれをどうやって行うのか困っています...教授のドライバからwhileループを抜け出すためにNodeクラスをnullptrに設定する必要はありませんか?あるいは、私はこれを完全に忘れてしまっているかもしれません。どんな助けでも大歓迎です。
======= [編集] =======
マイNodeクラスはもう、1つの他のノードのクラスを指すことはできません。これは、 "二重リンク"ではなく、 "単独リンク"リストでなければなりません。
======= [編集2.0] ========より多くのコードを求める人のため
、次は私のLinkedListクラスです。
class List{
private:
Node* head;
Node* tail;
int count;
public:
List();
List(Node firstLink);
~List(); //deconstructor
Node* getFirst() const;
Node* getLast() const;
void push_back(Node *data);
void push_front(Node *data);
Node* pop_front();
Node* pop_back();
int getLength() const;
List& operator=(const List& that);
};
リンクリストを「単独リンク」から「二重リンク」に変更すると、簡単にこれを行うことができます。二重リンクされたリストでは、現在のノードの前後にあるノードへのポインタがあります。これにより、前のノードに現在のノードへのポインタをNULL –
「自分のNodeクラスを指す変数」としてマークすることができます。 - この文は意味をなさない。変数はクラスを指しません。 –
@AlexZywickiそれはうまくいくはずですが、私の先生は残念なことに、二重にリンクされたクラスではなく、 "単独でリンクされた"リストを作ってほしいと思っています。 –