Wann ist Objekt gelöscht
-
Ja. (Ist aber unsauber.)
Wie löse ich es dann "sauber"
-
c++ user schrieb:
Ja. (Ist aber unsauber.)
Wie löse ich es dann "sauber"
Ich denke es wäre sauberer den Thread der das Objekt löschen soll, schlafen zu schicken bis dass zu löschende Objekt signalisiert dass keine Zugriffe mehr aktiv sind und erst dann erwacht um das Objekt zu löschen.
Gruß
Marcus
-
devkid schrieb:
c++ user schrieb:
... direkt nach dem Aufruf oder nachdem die Ausführung des Destruktors beendet ist.
Ist im Prinzip das selbe. "Direkt nach dem Aufruf" heißt ja, nachdem er aus dem Aufruf zurückgekehrt ist. Andernfalls müsste er ja Threads verwenden.

Jain.
Der Dtor könnte Funktionen in anderen Klassen aufrufen, die wiederum in das Objekt "zurückrufen" welches gerade zerstört wird.
Der Fall ist ziemlich unproblematisch, da das Objekt noch als "konstruiert" gilt, während der Dtor läuft.Oder, wenn es einen Event-Dispatcher gibt, und der Dtor diesen "anwirft", könnten Events dazu führen dass ein Call auf das Objekt abgesetzt wird.
Dieser Fall ist IMO fast genauso problematisch wie wenn es um mehrere Threads geht, und sollte daher auch vermieden werden.@c++ user: klingt für mich nach einem klassischen Fall von shared ownership. Oder, wenn einer der beiden Threads "dem anderen gehört", dann einfach vor dem Löschen des Singletons darauf warten, dass der "child thread" terminiert.
-
Hallo.
Ihr schreibt beide, dass ich darauf warten soll, dass der andere Thread beendet ist und ich dann erst dass Objekt löschen soll. Aber genau das mache ich doch. Ich warte im Destruktor darauf dass keiner mehr Zugriff hat und führe den Destruktor dann aus.
-
c++ user schrieb:
... Ich warte im Destruktor darauf ...
Evtl. wäre es besser "einen Schritt" vorher zu warten, also bevor der Deskosntruktor aufgerufen wird bzw. dass löschen des Objekts initiert wird ... (damit würde die Problematik "wann ist ein Objekt gelöscht" nicht entstehen
)Grüße
Marcus
-
Ja ich weiß doch leider ist das nicht möglich. Ich rufe die die Deletefunktiion vom Singleton auf und die ruft dann den Destruktor auf. Der Singleton ist aber ein Template der auch für andere Klassen implementiert ist. Und so kann ich es da nicht einbauen. Und vorher kann ich nicht abprüfen, da ja auf den Singleton jeder Zugriff hat.
-
Was lernen wir daraus? Singletons sind kacke.
Mann...
"Gehört" der Thread denn dem Singleton? Wenn, dann machst du das schon richtig. Wenn nicht, hast du da vermutlich grossen Unfug zusammenprogrammiert.
-
Nein der Thread gehört nicht dem Singleton. Wieso soll das nun großer Unfug sein.
-
Was lernen wir daraus? Singletons sind kacke.
Pauschalöaussagen sind Kacke. Singletions können richtig eingesetzt nützlich sein und falsch eingesetzt eben der berühmte Hammer mit dem die Schraube in die Wand getrieben wird.
-
Und ich finde ich habe den Singleton richtig eingesetzt. Ich erstelle eine Klasse die ein System repräsentiert das nur einmal vorhanden sein darf. Die Aussagen helfen mir nur nicht mein Problem zu lösen.
-
c++ user schrieb:
Und ich finde ich habe den Singleton richtig eingesetzt.
Dann ist ja alles gut.
Die Aussagen helfen mir nur nicht mein Problem zu lösen.
Sowas aber auch.
-
Sowas aber auch.
Was lernen wir daraus?
Hilf dir selbst!!! Und verzichte auf unnütze Kommentare aus Foren.