2009-05-18 18 views
6

Durante la lettura delle risposte a questo question ho avuto un dubbio sulla costruzione predefinita degli oggetti nel vettore. Per provarlo Ho scritto il seguente codice di prova:Costruzione predefinita di elementi in un vettore

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; 
} 

E infatti, il costruttore di default le strutture di prova è chiamato durante la creazione dell'oggetto vettoriale. Ma ciò che non sono in grado di capire è come fa l'STL a inizializzare gli oggetti che creo un vettore di tipo di dati di base come il vettore di int che esiste per il costruttore predefinito? cioè, come tutti gli interi del vettore hanno valore 0? non dovrebbe essere spazzatura?

risposta

10

Utilizza l'equivalente del costruttore predefinito per ints, che azzera le iniziali. Puoi farlo esplicitamente:

int n = int(); 

imposta n a zero.

Si noti che la costruzione predefinita viene utilizzata e richiesta solo se al vettore viene assegnata una dimensione iniziale. Se hai detto:

vector <X> v; 

non è necessario che X abbia un costruttore predefinito.

+0

Sembra che abbiamo un sacco di tempo a mano, oggi :) – xtofl

+0

Questo è la gioia della recessione :-( –

+0

non sapevo che .. Beh quello che chiamiamo int() come? Poi di nuovo perchè non abbiamo inizializzatori di default per i tipi di dati di base – Canopus

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

vettoriale richiede fondamentalmente default per il tipo a cui punta: Type()

  • se è il tipo di dati di base come int, doppia ci sono allora int(), doppio() {int () otterrà il valore 0}
  • se il tipo di dati definito dall'utente verrà chiamato il costruttore predefinito .
Problemi correlati