Pregunta

Últimamente, he estado leyendo mucho sobre constructores de los bien recibidos Preguntas frecuentes de C ++. Una de las entradas menciona que siempre es mejor usar listas de inicialización, en lugar de inicializar a los miembros de la clase dentro del bloque de código del constructor en sí.

Esto se debe a que el compilador tiende a crear múltiples copias de los miembros de la clase, en lugar de simplemente una copia.

Ejemplo

Bueno

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

Malo

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

Una cosa que también establece (y, aunque esto se relaciona con los constructores, también se relaciona con la inicialización pura de los objetos en general de las funciones incluso no miembros) es que al inicializar un objeto a través de métodos como los siguientes:

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

    foo.x(); //error
}

Lo harás y cito: "[declare] a non-member function that returns a Foo object".

(Para obtener más información, haga clic en el enlace de arriba)

La pregunta

Debido a esto, ¿es imprudente tener lo siguiente?

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

O incluso esto:

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

Debido a la forma en que se asignan (es decir, el hecho de que estos no sean pointers), me hace preguntarme si estos objetos necesitan o no la inicialización al principio. Si lo hacen, ¿es este el método correcto para hacerlo? O, ¿hay un mejor método de inicialización?

Cómo se relaciona esto con la pregunta

Esto se relaciona con la pregunta general debido a la forma en que la metodología detrás de la inicialización del constructor de C ++ se relaciona con ambos objetos de inicialización utilizando funciones de constructor, junto con el hecho de que soy ignorante de si los objetos asignados o no en la pila, o, por lo tanto, creo de todos modos de todos modos. - (de cualquier manera, objetos sin asignación de puntero) Incluso necesitar Inicialización en primer lugar.

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top