Ohne den Anwendungsfall zu wissen, oder das eigentliche Problem, das Sie lösen wollen (bitte über the XY problem, Ihre Frage lesen ist ein gutes Beispiel dafür) der einfachste Weg, nur ist die Neuzuweisung:
Cheese swiss("Jarlsberg", 4.99);
...
swiss = Cheese("Gruyère",5.99);
Das könnte von Natürlich müssen Sie einen Zuweisungsoperator implementieren, aber nach dem rules of three or five sollten Sie das trotzdem tun (aber der Zuweisungsoperator wird nicht benötigt, wenn Sie the rule of zero folgen).
Sie könnte verwenden auch Zeiger, wenn Sie explizit die aktuelle swiss
Objekt zerstören wollen:
Cheese* swiss = new Cheese("Jarlsberg", 4.99);
...
delete swiss;
swiss = new Cheese("Gruyère",5.99);
Aber Zeiger ist eine Dose Würmer, die Sie vermeiden sollten, und nicht wirklich brauchen viel in modernes C++. Aber Zeiger (oder Referenzen) werden benötigt, wenn Sie Polymorphie wollen. Dann könnten Sie einen Zeiger auf die Basisklasse haben, die auf die tatsächliche Instanz zeigt, und Dinge wie virtuelle Funktionen werden wie erwartet funktionieren.
Auch und je nach Ihrer Situation, die wir noch nichts wissen, könnte man natürlich Verwendung Scoping:
Cheese swiss("Jarlsberg", 4.99);
...
{
Cheese swiss("Gruyère",5.99);
// In here the swiss cheese is a Gruyère
...
}
// Out here the swiss cheese is a Jarlsberg
Obwohl Shadowing Variablennamen wie dies funktioniert, ist es eine schlechte Gewohnheit, die Sie, wie es vermeiden sollten fügt Verwirrung für Leser des Codes hinzu. Auf der anderen Seite hindert Sie auch bei der Verwendung von Scopes nichts daran, einen beliebigen (gültigen) Variablennamen zu verwenden, so dass Sie die äußere Bereichsinstanz jarlsberg
und die innere Bereichsinstanz gruyere
benennen könnten, wobei das gruyere
Objekt dann am Ende zerstört würde Der Bereich würde genau wie jede andere verschachtelte Scope-Variable zerstört und "verschwinden".
Wie ist "Cabot Clothbound" Cheddar Käse - Kommt aus dem Nichts in der Nähe [Cheddar] (https://en.wikipedia.org/wiki/Cheddar,_Somerset) –
Eine Variable (Instanz einer Klasse) auf dem Stapel deklariert werden kann habe seinen Speicher mit '' memset'' auf Null gesetzt (was in manchen Fällen nützlich wäre, denke ich ...), aber sein Speicher kann erst am Ende des Funktionsumfangs freigegeben werden, in dem du ihn deklariert hast (bis zum Ende deines Haupt hier). Sie können Ihren variablen Inhalt einfach mit dem Kopierkonstruktor überschreiben, wenn Sie wirklich auf dem Stapel bleiben wollen, aber warum verwenden Sie nicht den Heap und die Zeiger in diesem Fall, in dem Sie Ihre Instanz "löschen" können? – lordjohncena
@Ed: https://en.wikipedia.org/wiki/Cheddar_cheese –