Ich bin neu in C++ also die Frage. Ich habe eine Spielzeug-Implementierung einer Singlelink-Liste in C++.Destruktor für eine List-Klasse in C++
template<typename T>
class List {
template<typename U>
struct Node {
U data_;
Node<U>* next_;
Node() : data_(0), next_(nullptr) {}
Node(U data) : data_(data), next_(nullptr) {}
};
private:
Node<T>* head_;
std::size_t size_;
public:
List() : head_{nullptr}, size_{0} {}
void insert(const T& item) {
Node<T>* p(new Node<T>(item));
if (size_ == 0) {
head_ = p;
} else {
p->next_ = head_;
head_ = p;
}
size_++;
}
std::size_t getSize() {
return size_;
}
~List(){
while(head_){
Node<T> p = head_;
delete(p);
head_ = head_->next_;
}
};
Dieser Code scheint zu funktionieren. Das Problem besteht jedoch darin, dass die Objekte, die von new
zugewiesen werden, trotz des Destruktors ~List()
nie bereinigt werden. Kann mir jemand helfen, zu verstehen, wie ich einen Destruktor für diese Klasse schreiben kann, der alle zugewiesenen Knoten aufräumt?
Wichtige Bemerkung: Ich bin mir bewusst, dass dies mit intelligenten Zeigern getan werden kann, aber ich möchte die alte Art der Verwaltung von Heap verstehen.
Versuchen Sie, den destructor zu schreiben, und dann Fragen zu Problemen stellen Sie mit ihm haben, werden - niemand, es schreiben wird für Sie. –
Ein Destruktor für eine Klasse 'T' ist eine Memberfunktion ohne Argumente mit dem Namen '~ T'. –
Wissen Sie, wie Sie über die Knoten in der Liste iterieren? Dann weißt du im Grunde alles, was du wissen musst. –