Move-Konstruktor



  • @C-Sepp sagte in Move-Konstruktor:

    Ah stimmt...msPtr ist ja vom Typ Zeiger auf Measure, msPtr[i] spricht wiederrum den Wert an auf den msPtr[i] zeigt.

    Der erste Teilsatz stimmt, der zweite nicht:
    msPtr[i] zeigt nicht auf irgendetwas, sondern es beinhaltet ein Measure-Objekt!

    Also wird bei msPtr[i] = rd einfach das Measure-Objekt rd an den Index i des Arrays msPtr kopiert (bedenke, daß msPtr[i] <=> *(msPtr+i)).



  • Warum eine Zeigervariable jetzt ein Objekt beinhalten soll/kann ist mir nicht klar. Eigentlich verweist ein/dieser Zeiger
    doch auf einen Speicherbereich/Array von Objekten vom Typ Measure.
    Jetzt ist mir auch wieder nicht klar, warum man msPtr[i] = new Measure(1,2) nicht schreiben kann?
    msPtr und msPtr[i] sind doch beide vom Typ Zeiger auf Measure, wobei ich mich mit msPtr[i]/ *(msPtr+i) in der Werteebene bewege bzw. mit msPtr der Zeigervariablen einen bestimmten Speicherbereich zuweisen kann.



  • @C-Sepp sagte in Move-Konstruktor:

    msPtr und msPtr[i] sind doch beide vom Typ Zeiger auf Measure,

    Nein, ich habe meinen ursprünglichen Code korrigiert und im Konstruktor einen Aufruf eingebaut, der die Namen der Typen ausgibt. Falls man g++ nutzt werden die Namen in lesbarer Form ausgegeben, bei anderen Compiler hängt es von deren Vorgaben gab.

    P.S. Die Forensoftware missinterpretiert .cc als Toplevel Domain.



  • Könnt ihr mir verraten, welche Datentypen msPtr und msPtr[i] haben? Demangle.h ließ sich bei mir nicht inkludieren.
    Komischerweiser kann man msPtr[1] auch 2/3 Werte ohne Fehler zuweisen (msPtr= (1, 2, 3). Und das obwohl der
    Konstruktor für Measure doch nur über ein Argument verfügt??? Nochmals vielen Dank!



  • @C-Sepp sagte in Move-Konstruktor:

    Könnt ihr mir verraten, welche Datentypen msPtr und msPtr[i] haben?

    Du hast doch in deinem Programm Measure* msPtr; stehen. Also ist msPtr ein Zeiger auf Measure und msPtr[i] ein Measure.

    Komischerweiser kann man msPtr[1] auch 2/3 Werte ohne Fehler zuweisen (msPtr= (1, 2, 3).

    Hier verstehe ich schon die Frage nicht. Wieso zwei Drittel? Oder zwei von drei? Ergibt für micht beides keinen Sinn hier. Und das hier msPtr= (1, 2, 3) ist rechts ein Ausdruck mit dem Komma-Operator. Der ergibt 3. Und der kann wohl kaum einem Pointer zugewiesen werden.



  • @C-Sepp sagte in Move-Konstruktor:

    Könnt ihr mir verraten, welche Datentypen msPtr und msPtr[i] haben? Demangle.h ließ sich bei mir nicht inkludieren.

    Die Ausgabe meines Programms

    Konstruktor
    type of msPtr    Measure*
    type of msPtr[i] Measure
    Konstruktor
    type of msPtr    Measure*
    type of msPtr[i] Measure
    Kopierkonstruktor
    Move-Zuweisung
    Destruktor
    Destruktor
    Destruktor
    


  • @john-0 Alles klar!
    @wob : Ich meinte mit "2/3" "2 bzw. 3". In den Codescnipsel ist ein kleiner Fehler...soory! Ich meinte msPtr[i]= (1,2,3) anstatt msPtr = (1,2,3)



  • Das sind die Tücken der C++ Programmierung: wie @wob schon geschrieben hat, wird mittels (1,2,3) der Komma-Operator benutzt (nicht das Parametertrennzeichen(!), da ja kein Funktionsname vorher steht) und dann wird (da der Konstruktor für Measure nicht explicit ist), der Measure-Konstruktor mit dem letzten Wert der Komma-Liste (d.h. hier 3) aufgerufen.



  • Top...vielen Dank!


Anmelden zum Antworten