Kann sich ein Objekt selbst zerstören?



  • Es ist ein Pointer, der das Objekt was er hält bei gewissen umständen selber löscht (Scope verlassen, keine Referenzen mehr auf das Objekt usw.)

    Im Magazin ist da glaub ich ein Artikel zu, sonst könntest du auch mal bei boost.org vorbeischauen.



  • Ein Objekt kann sich selbst löschen, in der MFC wird das z.B. für die Notizen verwendet, die eingeblendet werden.
    *schauer über den Rücken jag*
    Das Dämliche an der Stelle ist nur, man weiß nie wann die Pointer auf so ein
    Objekt ungültig wird, referenzieren/verweisen ist also ganz schlecht.
    Man erzeugt sich damit für gewöhnlich schöne sporadisch auftretende Abstürze, wenn nicht garantiert werden kann das alle Pointer 100% auf Null gesetzt werden und das Objekt die Lösch-Funktion nicht selbst indirekt irgendwie aufruft (dann zerbröselt es die Anwendung auch).
    Meiner Meinung nach erspart man sich am Besten diesen Ärger gleich und implementiert eine zentrale Instanz für die Verwaltung der Objekte. Das ist viel robuster.



  • MathiasTemp schrieb:

    ...

    Sofern du dich jetzt mit deiner Aussage nicht ausschließlich auf die Microsoft-Bereiche beschränkst, ist sie IMHO völliger Unsinn.

    Sofern man dafür sorgt das man konsequent mit Smartpointern arbeitet, ist immer der Zeitpunkt der Zerstörung garantiert, oder kann zumindest sinnvoll gegengeprüft werden (z.B. bei boost::scoped_ptr, oder der Kombination von boost::shared_ptr/boost::weak_ptr).

    cu André



  • wer new sagt, sagt auch delete. 'nuff said.



  • Ob in einem Code "delete this" vorkommt oder nicht ist letztlich vollkommen egal. Man kann jeden Code der "delete this" verwendet so umschreiben dass es (zumindest "wörtlich") nichtmehr vorkommt, was aber IMO oft keinen Unterschied macht bzw. die Dinge sogar ... z.T. "undurchsichtiger" macht als notwendig.

    Was hier diskutiert ist ist IMO weniger ob "delete this" OK ist, sondern ob gewisse Techniken/Patterns OK sind. Wie z.B. "intrusive reference counting" oder "detached objects" (mit "detached objects" meine ich hier Objekte die irgendwas tun und sich danach selbst zerstören, d.h. auf die man von Aussen keine Zeiger halten "sollte", und wenn doch eben irgendwoher wissen muss dass das Objekt sich zu dem Zeitpunkt wo man den Zeiger verwendet noch nicht selbst zerstört haben kann. Analog zu "detached threads" eben).

    IMO gibt es durchaus Anwendungsfälle wo diese Techniken/Patterns gut und problemlos eingesetzt werden können. Natürlich können fast alle Techniken/Patterns zu Problemen führen wenn man sie "falsch" einsetzt, was diese aber nicht grundsätzlich schlecht oder gefährlich macht.


Anmelden zum Antworten