Gibt es Probleme beim Aufrufen von Funktionen in der Initialisierungsliste?

8

Ich schreibe diesen Kopierkonstruktor:

%Vor%

Gibt es ein Problem, numRow, numCol in der Initialisierungsliste wie folgt zu initialisieren: numRow(other.numRow), numCol(other.numCol) statt:

%Vor%

Außerdem weiß ich nicht, ob es ein solches Problem gibt, gibt es ein Problem, die Funktion anderer Objekte in der Initialisierungsliste aufzurufen, wie zum Beispiel:

%Vor%

anstelle von:

%Vor%     
limlim 10.10.2010, 08:19
quelle

2 Antworten

11
  

Gibt es ein Problem beim Initialisieren von numRow, numCol in der Initialisierungsliste [...]?

Im Allgemeinen gibt es zwei Probleme:

  1. Beim Initialisieren von Objekten in der Initialisierungsliste ist das Objekt noch nicht vollständig aufgebaut. Wenn Sie nicht statische Elementfunktionen aufrufen, rufen Sie sie daher auf einem noch nicht vollständig konstruierten Objekt auf. Wenn diese Funktionen versuchen, ein Unterobjekt des Objekts zu verwenden, das nicht konstruiert wurde, rufen Sie Undefiniertes Verhalten auf.
  2. Die Reihenfolge der Initialisierung ist die Reihenfolge der Deklaration der Mitglieder in der Klassendefinition , sie ist nicht die Reihenfolge, in der sie in der Initialisierungsliste aufgeführt sind . Daher müssen Sie auf die Initialisierung von Mitgliedern achten, die Daten von anderen Mitgliedern benötigen. (Dies kann als ein Teilproblem des vorherigen angesehen werden: Verwenden von noch nicht konstruierten Unterobjekten.) Es ist am besten, solche Situationen zu vermeiden, aber wenn sie nicht vermieden werden können, fügen Sie einen großen, gruseligen Kommentar hinzu, wo die Mitglieder deklariert werden in der Definition der Klasse, betont die Wichtigkeit ihrer Ordnung.

In Ihrem konkreten Beispiel spielt dies keine Rolle, Sie sind also sicher .

    
sbi 10.10.2010 08:27
quelle
2

Nein, eigentlich gibt es kein Problem. Beachten Sie jedoch, dass die Reihenfolge der Initialisierung NICHT die Reihenfolge ist, in der Sie Initialisierer in der Init-Liste angeben. Die Reihenfolge ist diejenige, in der Ihre Mitglieder in der Klasse deklariert wurden. Abgesehen von diesem potenziellen Problem sehe ich keinen. HTH

    
Armen Tsirunyan 10.10.2010 08:22
quelle

Tags und Links