Move-Konstruktor



  • Wie bereits erwähnt, wird mit msPtr[i] = rd ja ein Wert an msPtr übergeben. Welcher Wert ist das denn...eigentlich wird doch ein Objekt als Parameter übergeben? Wenn das der Wert des Membervariablen des üergebenen Objektes ist, wie verhält sich das dann für mehrere Membervariablen? Danke!



  • @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