temporaries

___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123reference ___ Eine Referenz ist ein Wert, der es einem Programm ermöglicht, indirekt auf ein bestimmtes Datum wie eine Variable oder einen Datensatz im Computerspeicher oder in einem anderen Speichergerät zuzugreifen. ___ answer7575241 ___

Sie müssen so etwas tun:

%Vor%

Auf diese Weise geht das übergeordnete "a" nicht aus dem Geltungsbereich, bis Sie wirklich damit fertig sind (nach dem Aufruf von "verwenden").

Das Problem mit dem ursprünglichen Code ist, dass der Elternteil "Anna" nur lange genug herumstehen muss, um "Baby" anzurufen, und der Elternteil kann vor dem Funktionsaufruf verworfen werden. Indem Sie das übergeordnete Element zu einer Variablen mit Gültigkeitsbereich machen, können Sie steuern, wann es zerstört wird.

Sieht das für mich gefährlich aus? Ja. Daher schlage ich einen Blick auf die Antwort von m-sharp auf die dynamische Zuweisung. Aber wenn Sie eine Methode wünschen, die keine Referenzzählung benötigt, usw. können Sie dies auf diese Weise tun ...

    
___ qstnhdr ___ Verhindern, dass die Lebensdauer vorübergehend verlängert wird? ___ qstntxt ___
Das ist vielleicht unmöglich, aber ich habe mich gefragt, ob es möglich ist, ein vorübergehendes Ding von seinem ursprünglichen Ausdruck zu halten. Ich habe eine Kette von Objekten, die auf Elternobjekte zeigen, und eine Memberfunktion, die ein Kindobjekt erzeugt, ein vereinfachtes Beispiel ist hier

%Vor%

Ich möchte %code% verwenden, um es an eine Funktion zu übergeben, und zwar in etwa so:

%Vor%

Ist in Ordnung.

Das funktioniert gut, solange kein Provisorium den ursprünglichen Ausdruck überlebt, aber wenn ich eines der letzten Provisorien an eine const-Referenz binde, überleben seine Eltern nicht, und ich bekomme einen segfault. Ich kann den Kopierkonstruktor und den Zuweisungsoperator von %code% ausblenden, aber gibt es irgendeine Möglichkeit, wie ich diese Art von Fehler verhindern kann? Ich möchte, wenn möglich, eine dynamische Zuordnung vermeiden.

    
___ answer7575181 ___

Es sieht so aus, als ob Sie hier eine Datenstruktur erstellen, in der Kinder Zeiger auf ihre Eltern haben. Die Verwendung von Provisorien wird Ihnen in diesem Fall garantiert Kummer bereiten. Um dies sicher zu machen, müssen Sie eine Art von Referenzzählung dynamisch zuordnen und möglicherweise verwenden.

Haben Sie darüber nachgedacht, %code% zu verwenden? Es ist eine Implementierung einer Referenzzähler Smart-Pointer-Klasse. Mit %code% und einigen Factory-Methoden können Sie möglicherweise den gewünschten Effekt erzielen und den Aufwand für die dynamische Speicherzuweisung verringern. Ich habe es ausprobiert und es scheint zu funktionieren. Sobald der Code den Bereich verlässt, werden alle Objekte gelöscht, da keine Referenzen mehr auf die shared_ptrs vorhanden sind.

Bearbeiten: Als Antwort auf den Kommentar von zounds habe ich das Beispiel so geändert, dass das Stammobjekt die Lebensdauer der Datenstruktur steuert.

%Vor%     
___ tag123constreference ___ hilf uns dieses Wiki zu bearbeiten ___ tag123objectlifetime ___ Die Objektlebensdauer (oder der Lebenszyklus) eines Objekts in der objektorientierten Programmierung ist die Zeit zwischen der Erstellung eines Objekts (auch Instanziierung oder Konstruktion genannt), bis das Objekt nicht mehr verwendet und dann zerstört oder freigegeben wird. ___ tag123Timporaries ___ hilf uns dieses Wiki zu bearbeiten ___
2
Antworten

Verhindern, dass die Lebensdauer vorübergehend verlängert wird?

Das ist vielleicht unmöglich, aber ich habe mich gefragt, ob es möglich ist, ein vorübergehendes Ding von seinem ursprünglichen Ausdruck zu halten. Ich habe eine Kette von Objekten, die auf Elternobjekte zeigen, und eine Memberfunktion, die ein K...
27.09.2011, 20:11