Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein temporäres Objekt ist ein nicht benanntes Objekt, das vom Compiler erstellt wird, um einen temporären Wert zu speichern.
Hinweise
In einigen Fällen muss der Compiler temporäre Objekte erstellen. Diese temporären Objekte können aus folgenden Gründen erstellt werden:
Um einen
const-Verweis mit dem Initialisierer eines anderen Typs als dem zugrunde liegenden des initialisierten Verweises zu initialisieren.Um den Rückgabewert einer Funktion zu speichern, die einen benutzerdefinierten Typ (UDT) zurückgibt. Diese temporären Objekte werden nur erstellt, wenn das Programm den Rückgabewert nicht in ein Objekt kopiert. Zum Beispiel:
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 in ein anderes Objekt kopiert wird, muss ein temporäres Objekt erstellt werden. Ein allgemeinerer Fall, in dem temporäre Dateien erstellt werden, ist während der Auswertung eines Ausdrucks, wobei überladene Operator-Funktionen aufgerufen werden müssen. Diese überladenen Operatorfunktionen geben einen benutzerdefinierten Typ zurück, der häufig nicht in ein anderes Objekt kopiert wird.
Betrachten Sie den Ausdruck
ComplexResult = Complex1 + Complex2 + Complex3. Der AusdruckComplex1 + Complex2wird ausgewertet und das Ergebnis wird in einem temporären Objekt gespeichert. Anschließend wird der Ausdruck temporär+ Complex3ausgewertet, und das Ergebnis nachComplexResultkopiert (wobei angenommen wird, dass der Zuweisungsoperator nicht überladen wurde).Um das Ergebnis einer Typumwandlung in einem benutzerdefinierten Typ zu 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 sich nach den Zeitpunkten der Erstellung und Zerstörung richtet. Jeder Ausdruck, der mehrere temporäre Objekte erstellt, zerstört sie am Ende in umgekehrter Reihenfolge der Erstellung.
Der Zeitpunkt der Zerstörung eines temporären Objekts hängt davon ab, wie es verwendet wird:
Temporäre Objekte, die zum Initialisieren von
const-Verweisen verwendet werden:
Wenn ein Initialisierer kein l-Wert desselben Typs ist wie der zu initialisierende Verweis, wird ein temporäres Objekt des zugrunde liegenden Objekttyps erstellt. Es wird durch den Initialisierungsausdruck initialisiert. Dieses temporäre Objekt wird zerstört, sobald das Verweisobjekt, an das es gebunden ist, zerstört wurde. Da diese Zerstörung auch deutlich nach dem Abschluss des Ausdrucks, der das temporäre Objekt erstellt hat, erfolgen kann, wird manchmal der Begriff Lebensdauerverlängerung verwendet.Temporäre Objekte, die als Ergebnis einer Ausdrucksauswertung erstellt werden:
Bei allen temporären Objekten, die nicht unter die erste Kategorie fallen und als Ergebnis einer Ausdrucksauswertung erstellt werden, erfolgt die Zerstörung am Ende der Ausdrucksanweisung (d. h. am Semikolon) oder am Ende der steuernden Ausdrücke fürfor-,if-,while-,do- undswitch-Anweisungen.
Weitere Informationen
Herb Sutters Blog zu Referenzen, einfach