Question

Dernièrement, j'ai beaucoup lu sur les constructeurs du bien reçu C ++ FAQ. L'une des entrées mentionne qu'il est toujours préférable d'utiliser des listes d'initialisation, au lieu d'initialiser les membres de la classe dans le bloc de code du constructeur lui-même.

En effet, le compilateur a tendance à créer plusieurs copies des membres de la classe, plutôt que simplement une seule copie.

Exemple

Bien

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

Mal

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

Une chose qu'elle indique également (et, bien que cela se rapporte aux constructeurs, il se rapporte également à l'initialisation pure des objets en général à partir de fonctions même non membres) est que lors de l'initialisation d'un objet à travers des méthodes telles que les éléments suivants:

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

    foo.x(); //error
}

Vous le ferez et je cite: "[declare] a non-member function that returns a Foo object".

(Pour plus d'informations, cliquez sur le lien ci-dessus)

La question

Pour cette raison, est-il imprudent d'avoir ce qui suit:

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

Ou même ceci:

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

En raison de la façon dont ceux-ci sont alloués (c'est-à-dire, le fait que ce ne sont pas des pointeurs), cela me fait me demander si ces objets ont même besoin d'initialisation au début. S'ils le font, est-ce la bonne méthode pour y aller? Ou, y a-t-il une meilleure méthode d'initialisation?

Comment cela se rapporte à la question

Cela concerne la question générale en raison de la façon dont la méthodologie derrière l'initialisation du constructeur C ++ se rapporte à la fois à l'initialisation d'objets utilisant des fonctions de constructeur, ainsi que le fait que j'ignore si les objets alloués ou non sur la pile - ou, donc je crois de toute façon de toute façon - (de toute façon, des objets sans allocation de pointeur) même besoin initialisation en premier lieu.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top