Nochmal new operator



  • Also, ich lege mit dem new operator ein Objekt an. Der new Befehl steht in einem try Block. Exceptions von new werden abgefangen und ErrorMessage erzeugt dann einfach eine Messagebox mit der Fehlerangabe.
    Das komische ist nun, dass new keine Exception erzeugt, aber myObjPtr nach dem new trotzdem NULL ist.

    class MyObjT{
        ...
      };//In Header definiert, aber hier inline
    
      MyObjT *myObjPtr = nullptr; //In .cpp Datei, globale Variable
    
      int perform(void){   
        try{
        	myObjPtr = new MyObjT;
        }
        catch(exception){
        	ErrorMessage("Creating of  Class failed!");
        	return EXIT_FAILURE;
        }
        ...
        delete myObjPtr;
        return EXIT_SUCCESS;
     }
    

    Verwende ich hingegen

    myObjPtr = new (nothrow) MyObjT;
    

    dann enthält myObjPtr einen Zeiger auf ein valides Objekt.

    Meine erste Idee war, dass der Konstruktor eine Exception erzeugt und nicht new selbst. Auch dann müsste jedoch in den catch Block gesprungen werden.
    Wie kann es sein, dass es in dem einen Fall funktioniert und im anderen Fall nicht?
    Ich versuche den Fehler weiter einzugrenzen, aber zur Zeit ist dies der Code, den ich für minimal halte um den relevanten Programmablauf zu zeigen.


  • Mod

    MC schrieb:

    Ich versuche den Fehler weiter einzugrenzen, aber zur Zeit ist dies der Code, den ich für minimal halte um den relevanten Programmablauf zu zeigen.

    Erzeugt er denn auch den Fehler? Du hast in deinem anderen Thread ja schon irrelevanten Code gezeigt. Lies dir dringend den Thread über das richtige Posten von Code durch.

    Außerdem zeigt dieser Code die gleichen Fehldesigns wie in deinem anderen Thread. Bloß manuelle Speicherverwaltung + Exceptions + globale Variablen ist noch einmal gleich mehrere Eskalationsstufen schlimmer. Da wunderst du dich über Fehler? Warum machst du das überhaupt so?



  • Ich verwende zum Kurvenfitten folgende Bibliothek, die aber in C geschrieben ist.

    /*
    * Project: LevenbergMarquardtLeastSquaresFitting
    *
    * File: lmmin.h
    *
    * Contents: Public interface to the Levenberg-Marquardt core implementation.
    *
    * Author: Joachim Wuttke 2004-2010
    *
    * Homepage: www.messen-und-deuten.de/lmfit
    */

    Die Fitfunktion wird in diesem Paket per Callback Funktionenpointer eingebaut.
    Bevor ich die Fitroutinen verwende, erstelle ich ein Objekt, welches eine Methode zum Entgegennehmen der Einstellungen für den Fit beinhaltet, die Startparameter in privaten Elementen speichert und die Fitfunktionen bereitstellt.
    Die Callback Funktion, die über die Fitbibliothek aufgerufen wird, ruft eine Methode des Objektes auf, um einen Wert von der am Anfang ausgewählten Fitfunktion zu erhalten. Das Objekt bzw. eine Referenz auf das Objekt kann ich nicht an die Callback Funktion übergeben. Daher sah ich erstmal keine andere Möglichkeit als den globalen Pointer auf das Objekt zu verwenden.


Anmelden zum Antworten