Ricerca…


introduzione

Altri esempi su come C ++ può andare storto.

Continuazione da comportamento indefinito

Riferendosi a membri non statici negli elenchi di inizializzatori

Il riferimento a membri non statici negli elenchi di inizializzatori prima che il costruttore abbia iniziato l'esecuzione può provocare un comportamento indefinito. Questo risulta dal momento che non tutti i membri sono costruiti in questo momento. Dalla bozza standard:

§12.7.1: per un oggetto con un costruttore non banale, facendo riferimento a qualsiasi membro non statico o classe base dell'oggetto prima che il costruttore inizi l'esecuzione, si ottiene un comportamento non definito.

Esempio

struct W { int j; };
struct X : public virtual W { };
struct Y {
   int *p;
   X x;
   Y() : p(&x.j) { // undefined, x is not yet constructed
   }
};


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow