Logfile ohne Overhead



  • include guards hast du?!

    Logfile* Logfile::getLogfile(){
        //Singleton
        return _instance == NULL ? _instance = new Logfile("Logfile.txt") : _instance;
    }
    

    hmm.. bäh! : D

    Logfile* Logfile::getLogfile()
    {
      if(_instance == NULL)
        _instance = new Logfile("Logfile.txt");
    
      return _instance;
    }
    

    wenn man es andersrum schreibt und 2x auf NULL prüft, hat man es so gar thread-safe:

    Logfile* Logfile::getLogfile()
    {
      if(_instance != NULL)
        return _instance;
    
      if(_instance == NULL)
        _instance = new Logfile("Logfile.txt");
    
      return _instance;
    }
    

    da gabs mal irgendwo hier nen schönen link (mit ner sehr ausführlichen beschreibung zu diesem problem), allerdings hab ich den nicht mehr - vll weiß ja jmd anders, was ich meine und hat ihn noch und postet ihn...

    bb



  • ...



  • jo, natürlich noch nen lock zwischen die beiden ifs... ^^



  • ...



  • Ja, ok mit if's sieht es echt schöner aus... Include Guards hab ich natürlich auch 😉 (allerdings nicht gepostet)

    Thread-safe ist schon mal nicht schlecht... Darüber hab ich mir schon gedanken gemacht. Thanks!

    EDIT:
    der Fehler hat sich jetzt geändert... Zwar immer noch multiple definition of _instance, aber jetzt im .cpp-File!
    (außerdem hab ich noch "first defined here" im main-File)

    Schätzungsweise ist es dann diese Zeile:

    //init
    Logfile* Logfile::_instance = NULL;
    

    Wo muss die genau hin? Ich hab sie einfach ganz oben (nach includes/using) direkt ins .cpp-File rein (ohne Funktion drum herum oder sowas)

    EDIT2:
    ja, wenn ich die Zeile auskommentiere compiliert und linkt er es richtig und ohne Fehler. (allerdings wird die Ausführung fraglich)



  • ...



  • Nein, ich weiß, dass man sowas auf keinen Fall machen sollte 😉

    Das komische ist auch, dass ich 3 Arten von "Fehlern" habe und bei jedem mal clean/build springt der hin und her:

    1. multiple definition of _instance
    2. undefined reference to _instance (bei allen _instance im .cpp)
    3. es funktioniert (hä!?) - ja!

    Strange...



  • </Exit> schrieb:

    Das komische ist auch, dass ich 3 Arten von "Fehlern" habe und bei jedem mal clean/build springt der hin und her

    Das kann nicht sein. Nach jedem clean/build muß die Reaktion gleich sein.
    Riecht nach Compiler-Ist-Kaputt. Falls Du Microsoft verwendest, lösch (während die IDE nicht auf ist) die *.ncb.



  • Soviel Diskussion um ein so altes Thema der Programmierung? 😕

    Kann jeder machen wie er will. Präprozessor-Anweisungen an den Compiler sind schon mal gut, aber im Quelltext aufwendig. Auskommentieren der Logfile-Einträge kann ohne Overhead sehr nützlich sein und lässt sich später jederzeit reaktivieren. Ich mache das nur so und kille die Logdatei für die Releaseversion.



  • oh man... Fehler gefunden!

    Ich war zu blöd bei Eclipse die Pfadvariablen richtig zu setzen (habe mehrere Ordner).
    Interessant ist nur, dass dann der Fehler so springt.

    Naja, jetzt läuft's. Vielen Dank nochmal an alle 😉


Anmelden zum Antworten