Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Anonymous
unregistriert
Wie gesagt: Es funktioniert nur bei Instanzen, die mit new angefordert wurden. Nicht mal mit new[] geht es.Zitat von »"Gotbread"«
delete this ist 100% legal und funktioniert, ich nutze es hauptsächlich
in Release() Funktionen.
Administrator
Zitat von »"unsigned long"«
Nein, das Objekt in dem du gerade bist bei "DeleteMySelf" existiert nicht mehr, das bedeutet dass auch die Methode nicht mer existiert und du versuchst Code in einer Methode auszuführen die nicht mehr existiert.
Das bedeutet du führst Code im Null-Speicher aus.
Zitat von »"Nexus"«
Ich hätte es nicht gerne, wenn ich mich so stark einschränken müsste. Zum Glück gibt es bessere Wege. Für Release-Funktionen wäre RAII bestimmt geeigneter.
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
class Blub { private: Blub(int arg); Blub(const Blub&); Blub& operator =(const Blub&); ~Blub(); public: static Blub* create(int arg) { return new Blub(arg); } void Release() { delete this; } }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
struct foo { void bar () { std::cout << "this: " << this; } }; ... foo* f = 0; f->bar (); |
Zitat von »"drakon"«
Das funktioniert wunderbar. Ist auch erlaubt, weil eben die Funktion implizit nur einen Zeiger auf die Instanz übernimmt und this-> automatisch anhängt, wenn man auf eine Membervariable zugreift und diese nicht überdeckt wird.
Zitat von »"dot"«
Zitat von »"drakon"«
Das funktioniert wunderbar. Ist auch erlaubt, weil eben die Funktion implizit nur einen Zeiger auf die Instanz übernimmt und this-> automatisch anhängt, wenn man auf eine Membervariable zugreift und diese nicht überdeckt wird.
ne das gibt imo undefiniertes verhalten, weil du einen nullpointer dereferenzierst.
Werbeanzeige