TimingTool



  • Irgentwie muss man doch auf das System prüfen und das ist halt eben nur durch Präprosezor anweisung machbar^^
    Hmm naja stimmt Timer ist ein wenig doof.
    Hmm wenn double nit geht kann ich ja aus der ne Normale Klasse machen nua mit int wenns bei double nen error gibt^^

    Warum ich das per new mache?
    Ka gewohnheit^^
    Mfg Wikinger75!



  • Wikinger75 schrieb:

    Ka gewohnheit^^
    Mfg Wikinger75!

    Warum es Memory Leak, Segfaults und Buffer overflow gibt?
    JA KLAR! GEWOHNHEIT! 🙄


  • Administrator

    Wikinger75 schrieb:

    Irgentwie muss man doch auf das System prüfen und das ist halt eben nur durch Präprosezor anweisung machbar^^

    Lies was ich gesagt habe. Ich sagte Präprozessor im Code sei schlecht nicht Präprozessor an sich. Man lagert solche Dinge aus. Ich habe mal den Thread rausgesucht:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-236515.html

    Startet mit etwas anderem, aber geht schnell ins entsprechende Thema über.

    Wikinger75 schrieb:

    Hmm wenn double nit geht kann ich ja aus der ne Normale Klasse machen nua mit int wenns bei double nen error gibt^^

    Nochmals, lies was ich gesagt habe. Es gibt keinen Fehler sondern eine Warnung. Aber sag mal, hast du das nicht mal probiert? Hast du überhaupt die jeweiligen Dokumentationen zu Sleep gelesen? Man könnte fast soweit gehen, hast du dir überhaupt was überlegt?

    Wikinger75 schrieb:

    Warum ich das per new mache?
    Ka gewohnheit^^

    Dann gewöhn dir immerhin an, dass man zu jedem new ein delete macht.

    Ich frag mich mehr und mehr, was das eigentlich soll.

    Grüssli



  • Hmm joa eigentlich schon^^
    Ich hab das delete vergesen, weil ich das von wx her gewohnt bin...
    Hmm guter Thread...
    Kapier aber nicht wirklich das schlimme dadran...
    Ich glaub wir lassens hier einfach ma^^

    Mfg Wikinger75!



  • Was soll Timer eigentlich machen?

    Wenn ihr ein anderes System als Windows habt probiert das mal bitte aus, obs auch da Funktioniert^^

    Installiere doch einfach Linux oder so in einer virtuellen Maschine.



  • es gibt noch memory leaks wenn das programm beendet wird? dachte windows räumt das automatisch auf?



  • Ist das Ernst gemeint? Na dein Code will ich nicht sehen! Zu jedem new gehört ein delete, es gibt keine Gewissheit wann und ob überhaupt das OS deinen Speicher freigibt welchen du mal angefordert hast.



  • komisch dass ich in Qt Anwendungsbeispiele noch nie delete Schlüsselwort gesehen hab, aber lauter new-Schlüsselwörter. Anscheinend räumt Qt das alles automatisch auf


  • Administrator

    xBlackKnightx schrieb:

    komisch dass ich in Qt Anwendungsbeispiele noch nie delete Schlüsselwort gesehen hab, aber lauter new-Schlüsselwörter. Anscheinend räumt Qt das alles automatisch auf

    Die meisten QT Objekte haben wie die meisten wxWidgets Objekte einen Referenzzähler dahinter. Daher muss man sie sogar per new anlegen, sonst gibt es massives undefiniertes Verhalten. Diese Objekte werden dann automatisch per delete freigegeben.
    Aber wenn du ein Objekt von einer eigenen Klasse, wie hier zum Beispiel der Timer, erstellst, dann musst du den auch selber freigeben. Das ist unter QT nicht anders.

    Wieder mal ein typisches Beispiel, wieso man zuerst richtig C++ lernen sollte, bevor man an die GUI Programmierung oder ähnliches geht ...

    Grüssli



  • hm äh ich hätt schon gern einen sauberen code. C++ Grundlagen lesen hab ich schon, nur kann ich mir nicht alles merken.

    Wo krieg ich einen guten fertigen Mechanismus her zum deleten ?

    Und die Klassen die ich neu definiere, müssen nur von diesem erben?



  • Wo krieg ich einen guten fertigen Mechanismus her zum deleten ?

    häh? was willst du? Oo



  • xBlackKnightx schrieb:

    hm äh ich hätt schon gern einen sauberen code. C++ Grundlagen lesen hab ich schon, nur kann ich mir nicht alles merken.

    Wo krieg ich einen guten fertigen Mechanismus her zum deleten ?

    Und die Klassen die ich neu definiere, müssen nur von diesem erben?

    😕 😮 🙄

    object_name* object = new object_name();
    
    //mach was damit
    
    delete object_name;
    

    fang erstmal damit an und poste nicht so einen käse :p



  • Ich glaube eher er wollte wissen wie der mechanismus bei wx und qt geht also wie man so was machen kann das man new machen muss aber selber dan kein delete mehr 😃



  • jhonnyDeppe schrieb:

    object_name* object = new object_name();
    //mach was damit
    delete object_name;
    

    fang erstmal damit an und poste nicht so einen käse :p

    🙂 :p 😞 😮
    💡 auch nicht schlecht wäre

    object_name* object = new object_name();
    //mach was damit
    delete object;
    

    😃 👍 🤡 🕶



  • Ich will alle Klassen da reinbinden. Damit ich nicht mehr um delete kümmern muss. Sowas ist langweilig. Sowas wie das hier, aber es soll besseres geben. Wo nur?

    template <class T> class refcnt_ptr {
    protected:
        // a helper class that holds the pointer to the managed object
        // and its reference count
        class Holder {
        public:
            Holder( T* ptr) : ptr_(ptr), count_(1) {};
            ~Holder() { delete ptr_;};
    
            T* ptr_;
            unsigned count_;
        };
    
        Holder* h_;
    
    public:
        // ctor of refcnt_ptr (p must not be NULL)
        explicit refcnt_ptr( T* p) : h_(new Holder(p)) {}
        // dtor of refcnt_ptr
        ~refcnt_ptr() { if (--h_->count_ == 0) delete h_; }
        // copy and assignment of refcnt_ptr
        refcnt_ptr (const refcnt_ptr<T>& right) : h_(right.h_) {
            ++h_->count_;
        }
        refcnt_ptr<T>& operator= (const refcnt_ptr<T>& right) {
            ++right.h_->count_;
            if (--h_->count_ == 0) delete h_;
            h_ = right.h_;
            return *this;
        }
        refcnt_ptr<T>& operator= (refcnt_ptr<T>& right) {
            ++right.h_->count_;
            if (--h_->count_ == 0) delete h_;
            h_ = right.h_;
            return *this;
        }
        // access to the managed object
        T* operator-> () { return h_->ptr_; }
        T& operator* ()  { return *h_->ptr_; }
    };
    


  • Nennt sich Garbage Collection. Aber vielleicht ist die Sprache Java eher was fuer dich.



  • Oder du nutzt die boost shared_ptr


  • Administrator

    Wie Firefighter sagt, Boost.SmartPr und daraus den shared_ptr :
    http://www.boost.org/doc/libs/1_39_0/libs/smart_ptr/smart_ptr.htm

    Allerdings, wenn du alle Objekte aller Klassen damit verwalten willst, dann machst du was falsch. Ein boost::shared_ptr ist nicht die super Lösung zu allem, vor allem nicht wenn du nur zu faul bist, ein wenig selber zu überlegen. Dann wäre vielleicht eher ein Sprachwechsel optimal. Alternativen wären zum Beispiel Java oder C#.

    Grüssli



  • weil es sonst quick&dirty wäre?



  • Java macht aber keine Exe^^
    C# was ich gar nicht, glaub aber dafür braucht man des NET Framework, das is genauso kacke... Alles zu abhängig xD


Anmelden zum Antworten