Aufrufen einer nicht-virtuellen Funktion auf gelöschtem Objekt
-
Hallo,
ich habe eine kurze theoretische Frage.
Wenn ich ein Objekt lösche und danach eine nicht-virtuelle Funktion darauf
aufrufe, die auf keine Felder oder virtuelle Funktionen zugreift,
ist das Verhalten dennoch undefiniert, oder?Gruß,
Newbie
-
Jap.
-
Man sollte dazu sagen: Das Verhalten ist nicht undefiniert, falls die genannte Funktion static ist (3.8, Satz 5). Und da sie ja nicht auf Membervariablen zugreifen soll, bietet es sich an, solche Funktionen static zu machen.
-
SeppJ schrieb:
Man sollte dazu sagen: Das Verhalten ist nicht undefiniert, falls die genannte Funktion static ist (3.8, Satz 5). Und da sie ja nicht auf Membervariablen zugreifen soll, bietet es sich an, solche Funktionen static zu machen.
Genau.
Habe da sogar mal was drüber geschrieben:
http://www.drakon.ch/?id=&offset=4&mobile=0&show_entry=76
-
Danke euch beiden!!!
Mir war schon klar, dass ich die Funktion statich machen kann

@Drakon:
Ich hab vorher sogar schonmal in deinen Blog auf deiner Homepage reingeschaut
Also mach weiter damit, es gibt Leute die sich manchmal deine Beiträge anschauen!
-
Wobei ich statische Funktionen ohnehin eher mit Qualifizierung der Klasse als des Objekts aufrufen würde, also
MyClass::StaticFunction();statt
MyObject.StaticFunction();
-
Ich schreibe unter Umständen lieber obj.foo() statt decl_type(obj)::foo()
-
drakon schrieb:
Habe da sogar mal was drüber geschrieben:
http://www.drakon.ch/?id=&offset=4&mobile=0&show_entry=76Der Bildheader mit dem Schnitzel und den Pommes ist genial
. Hat mir Appetit gemacht
.
-
Ich weis nicht woher ich's weis...
... aber irgendwie meine ich mich zu erinnern, dass Microsoft so Sachen wieif(this == NULL) return;im Code stehen hat.
Also kann man zumindest bei MS-Kompilern davon ausgehen, dass obiges nicht die Festplatte formatiert, sondern wie gewünscht funktioniert.
-
Bei einem gelöschten Objekt ist this aber nicht 0.

-
Mmmmh, jaaaha, fällt mir schwer, da zu widersprechen

-
volkard schrieb:
Ich schreibe unter Umständen lieber obj.foo() statt decl_type(obj)::foo()
Stimmt. Wobei ich bisher hauptsächlich Fällen begegnet bin, wo die Klasse unmittelbar klar war und man deshalb mit
MyClass::Foo()nichts verloren hat. Ich benutze ohnehin relativ selten statische Memberfunktionen.
-
Nexus schrieb:
volkard schrieb:
Ich schreibe unter Umständen lieber obj.foo() statt decl_type(obj)::foo()
Stimmt. Wobei ich bisher hauptsächlich Fällen begegnet bin, wo die Klasse unmittelbar klar war und man deshalb mit
MyClass::Foo()nichts verloren hat. Ich benutze ohnehin relativ selten statische Memberfunktionen.Bei mir ist das gleich. Benutze eher freie Funktionen.
@FreakY<3Cpp
Das ist ein Cordon Bleu! (Und ja. Das Ding war richtig lecker :))