Pointers und new operator
-
Warum geht das:
Object *obj = new Objectaber das nicht:
Object *obj = nullptr retval some_function_using_Object(parameters){ assert (nullptr != obj);//Documented assertion obj -> somemethod(); } int main(void{ obj = new Object; some_function_using_Object(parameters); delete obj; obj = nullptr; }???
Die Assertion ist das Einzige, was funktioniert.
-
Der zweite Code ist halt voller Fehler.
-
Ok, war etwas zu voreilig und habe versucht den eigentlichen Programmcode im Kopf auf das wesentliche zu reduzieren, was offensichtlich schief gelaufen ist.
Da nach Bugfixing der Testcode jetzt läuft muss wohl was anderes schiefgelaufen sein. Der Testcode scheint nicht repräsentativ für mein Problem zu sein.
-
MC schrieb:
Der Testcode scheint nicht repräsentativ für mein Problem zu sein.
Aber er zeigt, woher das Problem wahrscheinlich kommt: Rumgefrickel mit rohen Pointern. Wenn du ein nullptr-assert brauchst, dann heißt das, dass du an der Stelle anscheinend gar keinen Pointer willst. Denn der einzige Grund Pointer als Funktionsparameter zu benutzen ist ja gerade, dass sie 0 sein können. Und Objekte im gleichen Scope händisch deleten in dem sie erstellt wurden ist auch nicht gerade, wie man das normalerweise macht.