2009-05-18 18 views
6

Al leer las respuestas a este question, tengo una duda con respecto a la construcción predeterminada de los objetos en el vector. Para probar que escribí el siguiente código de prueba:Construcción predeterminada de elementos en un vector

struct Test 
{ 
    int m_n; 

    Test(); 

    Test(const Test& t); 

    Test& operator=(const Test& t); 
}; 

Test::Test() : m_n(0) 
{ 
} 

Test::Test(const Test& t) 
{ 
    m_n = t.m_n; 
} 

Test& Test::operator =(const Test& t) 
{ 
    m_n = t.m_n; 
    return *this; 
} 


int main(int argc,char *argv[]) 
{ 
    std::vector<Test> a(10); 
    for(int i = 0; i < a.size(); ++i) 
    { 
     cout<<a[i].m_n<<"\n"; 
    } 

    return 0; 
} 

y, efectivamente, la estructuras de prueba por defecto se llama al constructor al crear el objeto vectorial. Pero lo que no puedo entender es ¿cómo inicializa el STL los objetos que creo un vector de tipo de datos básico como el vector de ints ya que hay un constructor predeterminado para él? es decir, ¿cómo todas las entradas en el vector tienen valor 0? ¿No debería ser basura?

Respuesta

10

Utiliza el equivalente del constructor predeterminado para ints, que es inicializarlos en cero. Puede hacerlo explícitamente:

int n = int(); 

establecerá n en cero.

Tenga en cuenta que la construcción predeterminada solo se utiliza y es necesaria si el vector tiene un tamaño inicial. Si dijo:

vector <X> v; 

no es necesario que X tenga un constructor predeterminado.

+0

Parece que tenemos una gran cantidad de tiempo en las manos, hoy :) – xtofl

+0

Esa es la alegría de la recesión :-( –

+0

que no sabía que .. Bueno, ¿qué es lo que llamamos int() como? Una vez más ¿por qué no tenemos inicializadores predeterminados para los tipos de datos básicos. – Canopus

1
std::vector<Type> a(10);  // T could be userdefined or basic data type 

vectorial llama básicamente default para el tipo al que apunta: Type()

  • si es el tipo de datos básicos como int, doble son allí entonces int(), dobles() {int () obtendrá el valor 0}
  • si se llamará al constructor predeterminado del tipo de datos definido por el usuario.
Cuestiones relacionadas