Pointers und new operator



  • Warum geht das:

    Object *obj = new Object
    

    aber 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.


  • Mod

    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.


Anmelden zum Antworten