Temporäre Objekte
In einigen Fällen ist es notwendig für den Compiler, temporäre Objekte zu erstellen.Diese temporären Objekte können aus folgenden Gründen erstellt werden:
So fügen Sie einen Verweis const bei einer Initialisierung eines Typs initialisieren unterscheidet sich von dem des zugrunde liegenden Typs des Verweises, der initialisiert wird.
Um den Rückgabewert einer Funktion gespeichert werden, die einen benutzerdefinierten Typ zurückgibt.Diese temporaries werden nur erstellt, wenn das Programm den Rückgabewert nicht auf ein Objekt kopiert.Beispiele:
UDT Func1(); // Declare a function that returns a user-defined // type. ... Func1(); // Call Func1, but discard return value. // A temporary object is created to store the return // value.
Da der Rückgabewert nicht auf ein anderes Objekt kopiert wird, wird ein temporäres Objekt erstellt.Ein allgemeinerer Fall, in dem temporaries erstellt werden, ist während der Auswertung eines Ausdrucks, in dem überladenen Operator Funktionen aufgerufen werden müssen.Diese überladenen Operator Funktionen geben einen benutzerdefinierten Typ zurück, der häufig nicht auf ein anderes Objekt kopiert wird.
Betrachten Sie den Ausdruck ComplexResult = Complex1 + Complex2 + Complex3.Der Ausdruck Complex1 + Complex2 wird ausgewertet, und das Ergebnis wird in einem temporären Objekt gespeichert.Anschließend wird der Ausdruck temporär + Complex3 ausgewertet, und das Ergebnis wird auf ComplexResult kopiert (Zuweisungsoperator annehmend wird nicht überladen).
Um das Ergebnis einer Typumwandlung in einen benutzerdefinierten Typ speichern.Wenn ein Objekt eines angegebenen Typs explizit in einen benutzerdefinierten Typ konvertiert wird, wird das neue Objekt als temporäres Objekt erstellt.
Temporäre Objekte haben eine Lebensdauer, die nach ihrem Zeitpunkt der Erstellung und die Stelle definiert ist, an denen sie gelöscht werden.Jeder Ausdruck, der mehr als einer temporäres Objekt erstellt, nachdem alle zerstört er in umgekehrter Reihenfolge, in der sie erstellt wurden.Die Punkte, an denen Zerstörung auftritt, werden in der folgenden Tabelle dargestellt.
Zerstörung zeigt für temporäre Objekte
Erstellen Grund-temporäres |
Zerstörungs-Punkt |
---|---|
Ergebnis der Ausdrucksauswertung |
Alle temporaries, die als Ergebnis der Ausdrucksauswertung erstellt werden, werden am Ende der Ausdrucksanweisung (d. h. das Semikolon) oder am Ende der steuernden Ausdrücke für for, if, while, dound switch-Anweisungen zerstört. |
Initialisieren von Verweisen const |
Wenn ein Initialisierer kein l-Wert desselben Typs besteht darin, den der Verweiszähler, ein temporäres des zugrunde liegenden Objekttyp initialisiert wird, mit dem Initialisierungsausdruck erstellt und initialisiert wird.Dieses temporäre Objekt zerstört wird, direkt nach dem Verweisobjekt, an den es gebunden ist, zerstört wird. |