Pergunta

Ao ler as respostas a esta Eu tenho uma dúvida quanto à construção padrão dos objetos do vetor. Para testá-lo eu escrevi o seguinte código de teste:

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 com certeza, o Teste de estruturas construtor padrão é chamado durante a criação do objeto vetorial. Mas o que eu não sou capaz de entender é como é que o STL inicializar os objetos criar um vetor de tipo de dados básicos, como vector de inteiros desde há construtor padrão para isso? ou seja, como é que todos os ints no vetor de ter valor 0? não deveria ser lixo?

Foi útil?

Solução

Ele usa o equivalente do construtor padrão para ints, que é a zero Inicializar eles. Você pode fazê-lo explicitamente:

int n = int();

irá definir n para zero.

Note que a construção padrão é utilizado apenas e necessário se o vector é dado um tamanho inicial. Se você disse:

vector <X> v;

não há nenhuma exigência de que X tem um construtor padrão.

Outras dicas

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

Vector basicamente chama default para o tipo para o qual ele aponta: Type()

  • se é tipo de dados básicos como int, dupla estão lá, então int (), double () {int () terá valor 0}
  • Se o tipo de dados definidos pelo usuário, em seguida, construtor padrão seria chamado.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top