Werden Standardkonstruktoren automatisch für Membervariablen aufgerufen?

7

Sagen Sie, ich habe diese Klasse:

%Vor%

Wenn ich die member() in der Initialisierungsliste des Konstruktors von Awesome weglasse, wird der Konstruktor von member automatisch aufgerufen? Und wird es nur aufgerufen, wenn ich member nicht in die Initialisierungsliste einfüge?

    
Lanaru 16.08.2012, 18:19
quelle

2 Antworten

7

Aus § 8.5

  

Wenn für ein Objekt kein Initialisierer angegeben ist, ist das Objekt   Standard-initialisiert; Wenn keine Initialisierung durchgeführt wird, ein Objekt mit   Die automatische oder dynamische Speicherdauer hat einen unbestimmten Wert. [ Hinweis:   Objekte mit statischer oder Thread-Speicherdauer werden initialisiert,   siehe 3.6.2. -Hinweis]

Update für zukünftige Referenzen : Die Bedeutung von default initialized wird als

definiert
  

Die Standardinitialisierung eines Objekts vom Typ T bedeutet:
- wenn T ein a ist   (möglicherweise cv-qualifiziert) Klassentyp (Abschnitt 9), der Standardkonstruktor   denn T heißt (und die Initialisierung ist schlecht ausgebildet, wenn T keine hat   zugänglicher Standardkonstruktor) ;
- wenn T ein Array-Typ ist, jeder   Element ist default-initialisiert;
- sonst ist keine Initialisierung   ausgeführt.
Wenn ein Programm die Standardinitialisierung von aufruft   Ein Objekt eines const-qualifizierten Typs T, T soll ein Klassentyp mit a sein   Vom Benutzer bereitgestellter Standardkonstruktor.

Weiter variiert es von dem initialisierten Wert unter Bezugnahme auf: -

  

Um ein Objekt vom Typ T zu value-initialisieren bedeutet:
- wenn T ist a   (möglicherweise cv-qualifiziert) Klassentyp (Abschnitt 9) mit einem Benutzer zur Verfügung gestellt   Konstruktor (12.1), dann wird der Standardkonstruktor für T aufgerufen (und   Die Initialisierung ist schlecht ausgebildet, wenn T keinen zugänglichen Standard hat   Konstruktor); - wenn T eine (möglicherweise cv-qualifizierte) Nicht-Vereinigungsklasse ist   Geben Sie ohne einen vom Benutzer bereitgestellten Konstruktor ein, dann ist das Objekt   Null initialisiert und, wenn T implizit deklariert Standardkonstruktor   ist nicht-trivial, dieser Konstruktor wird aufgerufen.
- wenn T ein Array ist   type, dann wird jedes Element value-initialisiert; andernfalls -   Objekt ist Null-initialisiert.

    
perilbrain 16.08.2012, 18:30
quelle
13

Ja. Wenn eine Variable in der Initialisierungsliste nicht angegeben ist, wird sie standardmäßig automatisch erstellt.

Standard contruction bedeutet, dass, wenn membertype ein class oder struct ist, wird es standardmäßig konfiguriert, wenn es ein eingebautes Array ist, dann wird jedes Element standardmäßig sein konstruiert und wenn es sich um einen eingebauten Typ handelt, wird keine Initialisierung ausgeführt (es sei denn, das Awesome -Objekt hat eine statische oder fadenlokale Speicherdauer). Der letzte Fall bedeutet, dass die Elementvariable unvorhersehbaren Datenmüll enthalten kann (und häufig auch enthält), falls das Objekt Awesome auf dem Stapel erstellt oder auf dem Heap zugewiesen wird.

    
Ralph Tandetzky 16.08.2012 18:22
quelle

Tags und Links