2016-03-20 2 views
-1
class lista { 
class wezel { 
    wezel *nast; // next node in list 
    std::string napis; // string in node 
        // ... 
public: 
    void set_napis(string napis1) { napis = napis1; } 
    void set_nast(wezel *nast1) { nast = nast1; } 
    wezel(const std::string napis1, wezel *nast1) : napis(napis1), nast(nast1) {} 
    friend ostream& operator<< (ostream &wy, const wezel &wzl) { 
     if (wzl.nast) return wy << wzl.napis << ", " << *wzl.nast; 
     else return wy << wzl.napis; 
    } 

}; 
wezel *poczatek; // pointer to the beg of the list 
public: 
lista(); 
lista(const lista &lst); 
lista(lista &&lst); 
lista(initializer_list<std::string> lst); 
lista& operator= (const lista &lst); 
lista& operator= (lista &&lst); 
~lista(); 

public: 
friend ostream& operator<< (ostream &wy, const lista &lst) { 
    if (lst.poczatek) return wy << "(" << *lst.poczatek << ")"; 
    else return wy << "()"; 
} 

};Wie mache ich einen Destruktor für die Klasse in eine andere Klasse mit Zeigern C++? So etwas wie One-Direction-Liste Container-Klasse und Klasse von Knoten

Ich möchte Destruktor schreiben, die nicht nur Mitglied der Klasse lista sondern auch Wezel (alle Knoten) Der Zeiger in Wezel bedeutet, dass Zeiger auf das nächste Element der Liste ist * Nast. Wenn es nullpointer ist, ist es das Ende der Liste. Ich weiß, ich sollte keine Destruktoren für Strings erstellen, aber was ist mit diesen Zeigern usw.?

Große Entschuldigungen für mein Englisch. Ich bin aus Polen;) Greets;)

+0

Warum nicht einfach http://www.cplusplus.com/reference/list/list/ verwenden, anstatt das Rad neu zu erfinden? –

+0

weil es unsere Aufgabe vom Tutor ist :) –

+0

Ich sehe - Sie wollen, dass wir Ihre Hausaufgaben schreiben. –

Antwort

0

Das Problem hier ist, dass Sie keine Kontrolle darüber haben, wie die wezel erstellt wurden. Wenn sie mit new erstellt wurden, fein, nur delete sie. Aber wenn ein Bündel mit new[] erstellt wurde, dann sollten sie mit einem delete[] zerstört werden, und wenn man gerade auf dem Stapel im Haupt erstellt wurde (wezel wezel1("mystring");) sollte es überhaupt nicht gelöscht werden: es wird automatisch am Ende verschwinden der Funktion oder des Blocks, wo sie deklariert wurde.

TL/DR: es sei denn, die API erklärt sich ausdrücklich, dass alle wezel in einem listaMuss haben mit new erstellt worden ist, sollten Sie nicht versuchen, sie zu löschen.

Oder: Sie sollten eine Methode in lista verwenden, um eine neue Zeichenfolge hinzuzufügen und die wezel in dieser Methode mit new zu erstellen. Auf diese Weise steuern Sie, wie es erstellt wurde und können es sicher delete.

Verwandte Themen