Domanda

Ultimamente, ho letto molto sui costruttori dei ben accolti FAQ C ++. Una delle voci menziona che è sempre meglio utilizzare elenchi di inizializzazione, invece di inizializzare i membri della classe all'interno del blocco del codice del costruttore stesso.

Questo perché il compilatore tende a creare più copie dei membri della classe, piuttosto che semplicemente una copia.

Esempio

Bene

Foo::Foo( void )
    : mBar( new Bar ) //pointer to some memory address
{
}

Male

Foo::Foo( void )
{
    mBar = new Bar;
}

Una cosa che afferma anche (e, sebbene ciò si riferisca ai costruttori, si riferisce anche alla pura inizializzazione degli oggetti in generale da funzioni anche non membri) è che quando si inizializza un oggetto attraverso metodi come i seguenti:

void f( void )
{
    Foo foo( Bar() ); //Bad.

    foo.x(); //error
}

Lo farai e cito: "[declare] a non-member function that returns a Foo object".

(Per maggiori informazioni, fare clic sul link sopra)

La domanda

Per questo motivo, non è saggio avere quanto segue:

Geometry::Geometry( void )
    : mFaces( QVector< GLushort >() ),
      mFinalized( false ),
      mNormals( QVector< QVector3D >() ),
      mVerticies( QVector< QVector3D >() )

O anche questo:

Geometry::Geometry( void )
    : mFaces( QVector< GLushort > ),
      mFinalized( false ),
      mNormals( QVector< QVector3D > ),
      mVerticies( QVector< QVector3D > )

A causa del modo in cui questi sono allocati (cioè, il fatto che questi non siano puntatori), mi chiedo se questi oggetti hanno anche bisogno di inizializzazione all'inizio. Se lo fanno, è questo il metodo corretto per farlo? Oppure esiste un metodo migliore di inizializzazione?

Come questo si riferisce alla domanda

Ciò si riferisce alla domanda generale dovuta al modo in cui la metodologia alla base dell'inizializzazione del costruttore C ++ si riferisce all'inizializzazione di oggetti usando le funzioni del costruttore, insieme al fatto che sono ignorante se gli oggetti assegnati o meno allo stack - o, quindi credo comunque, credo comunque - (in entrambi i casi, anche oggetti senza allocazione del puntatore) bisogno inizializzazione in primo luogo.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top