Elementinitialisierer auch für Zeiger?



  • also ich will dass der zeiger auf null zeigt um crashs abzusichern
    aber so funktioniert das nicht

    Mouse_Thread::Mouse_Thread( bool *stopper  ) : bool(stopper)
    {
    	...
    }
    

    in header:
    Mouse_Thread( bool *stopper = NULL );

    so funz auch nicht : stopper(NULL)

    was tun?



  • xBlackKnightx schrieb:

    also ich will dass der zeiger auf null zeigt um crashs abzusichern aber so funktioniert das nicht

    Ich verstehe dein Anliegen nicht wirklich.

    Aber mit:

    class Mouse_Thread
    {
        private:
            bool * stopper;
        public:
            Mouse_Thread(bool * stopper = NULL)
            :   stopper(stopper)
            {
            }
    };
    

    Würde der Zeigerwert, sofern nichts anderes angegeben, mit NULL initialisiert werden. Ich weiß nicht was der Zeiger in deinen Fall konkret sein soll, und ob eine Änderung in der Klasse sich auf den Übergabewert auswirken soll (Dann sollte der Parameter wohl eher eine Zeiger-Referenz oder ein Doppelzeiger sein).

    Aber besser wäre es wohl, wenn du dein Problem so beschreibst, das es auch Andere verstehen.



  • du hast einfach die init-liste in völlig verquerer Syntax geschrieben. Member werden mit membername(wert) initialisiert. du hast statt des Membernamen bool genommen - und das ist noch nichtmal der richtige typ 😉



  • Zudem würde ich von Parameternamen, die sich mit Bezeichnern für Membervariablen überschneiden, abraten. Nimm besser new_stopper oder Stopper oder irgendwas.



  • Nexus schrieb:

    Zudem würde ich von Parameternamen, die sich mit Bezeichnern für Membervariablen überschneiden, abraten. Nimm besser new_stopper oder Stopper oder irgendwas.

    Ne ne ne.

    Ist schon ok so. Man muss nicht immer zwangslaeufig neue namen erfinden.

    ein

    Foo(T value) : value(value) {}

    ist schon vollkommen in Ordnung.



  • Aber sobald man noch etwas Weiteres im Konstruktor machen will, benötigt man ständig wieder this-> . Na gut, es ist vielleicht etwas Ansichtssache, aber ich bin da lieber gleich konsequent.



  • Nexus schrieb:

    aber ich bin da lieber gleich konsequent.

    konsequent mit was? mit neuen namen erfinden?

    ich finde halt, dass wenn etwas foo heisst ich es auch foo nennen sollte 😉

    und 99% aller ctors bestehen ja eh nur aus der init liste...



  • äh ich dachte man sollte möglichst mit elementinitialisierer arbeiten?

    dachte für zeiger auch? jetzt durcheinander - aaah...

    oder gilt das nur für klassen, nicht diese typen wie bool, int ?



  • xBlackKnightx schrieb:

    äh ich dachte man sollte möglichst mit elementinitialisierer arbeiten?

    dachte für zeiger auch? jetzt durcheinander - aaah...

    wer widerspricht hier denn der aussage dass man moeglichst immer mit elementinitialisierungslisten arbeiten sollte...?



  • Shade Of Mine schrieb:

    konsequent mit was? mit neuen namen erfinden?

    ich finde halt, dass wenn etwas foo heisst ich es auch foo nennen sollte 😉

    Momentan haben Membervariablen bei mir ein "My" vornedran. Von daher stellt sich die Frage eigentlich nicht, ich lass bei Parametern einfach das Präfix weg.

    Und ja, ich weiss, das geht in Richtung Ungarische Notation, aber ganz so schlimm finde ich das jetzt nicht. Zumal ich das sonst nicht mache und auch keine Typen oder sonstige Spracheigenschaften anhand des Namens kennzeichne.



  • Nexus schrieb:

    Und ja, ich weiss, das geht in Richtung Ungarische Notation, aber ganz so schlimm finde ich das jetzt nicht. Zumal ich das sonst nicht mache und auch keine Typen oder sonstige Spracheigenschaften anhand des Namens kennzeichne.

    members, konstruktorparameter oder zeiger kennzeichnen, sind gute sachen, auch wenn ich sie nicht mache.



  • da meine variablennamen prinzipiell immer klein sind, mach ich einfach immer nen unterstrich davor (bei parametern) - halte ich auch für am übersichtlichsten...

    bb


Log in to reply