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 einMeasure
-Objekt!Also wird bei
msPtr[i] = rd
einfach dasMeasure
-Objektrd
an den Indexi
des ArraysmsPtr
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 istmsPtr
ein Zeiger aufMeasure
undmsPtr[i]
einMeasure
.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ürMeasure
nichtexplicit
ist), derMeasure
-Konstruktor mit dem letzten Wert der Komma-Liste (d.h. hier3
) aufgerufen.
-
Top...vielen Dank!