Hola, estoy tratando de entender cómo funcionan los constructores y, por lo tanto, leo diferentes ejemplos. Tengo un constructor de clase que toma un initializer_list pero sigue dando fallas de segmentación. Los archivos que yo ...

0
Jason Liam 15 mar. 2021 a las 07:48

1 respuesta

La mejor respuesta

[Solo adivino aquí, ya que no muestra un ejemplo mínimo reproducible adecuado].

Tienes un conjunto de consejos en tu clase.

Tu constructor de StrVec(std::initializer_list<std::string> il) not inicializa estos punteros, por lo que push_back probablemente usará estos punteros sin inicializar y tendrás un comportamiento indefinido < / em> y el accidente.

Puede realizar fácilmente la inicialización predeterminada delegándola al constructor predeterminado:

StrVec::StrVec(std::initializer_list<std::string> il)
    : StrVec()  // Delegte default initialization
{
    for(const auto &s:il){
        push_back(s);
    }
}

Dicho esto, el std::initializer_list tendrá un tamaño, lo que significa que puede preasignar el número exacto de elementos necesarios y luego copiarlos en lugar de llamar a push_back en un bucle.

1
Some programmer dude 15 mar. 2021 a las 04:57