Domanda

Durante la lettura delle risposte a questa domanda ho ottenuto un dubbio per quanto riguarda la costruzione di default degli oggetti nel vettore. Per provarlo Ho scritto il seguente codice di prova:

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 quello che io non sono in grado di capire è come fa lo STL inizializza gli oggetti che creo un vettore di tipo di dati di base, come vettore di int poiché non v'è costruttore di default per questo? vale a dire come fa tutte le interi nel vettore hanno valore 0? non dovrebbe essere spazzatura?

È stato utile?

Soluzione

Si utilizza l'equivalente del costruttore predefinito per interi, che è a zero la loro inizializzazione. Si può fare in modo esplicito:

int n = int();

imposterà n a zero.

Si noti che la costruzione predefinito viene utilizzato solo ed necessario se il vettore è data una dimensione iniziale. Se lei ha detto:

vector <X> v;

non v'è alcun obbligo che X ha un costruttore di default.

Altri suggerimenti

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

Vector 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 l'utente definito tipo di dati, allora costruttore di default sarebbe chiamato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top