estoy tratando el siguiente código:¿El método vector.resize() llama a los constructores de elementos predeterminados al redimensionar?
struct _Struct2
{
void *ptr;
double dval;
};
struct _Struct
{
float fval;
int ival;
std::vector<_Struct2> data;
};
std::vector<_Struct> vec;
int main()
{
vec.resize(9);
for (int i = 0; i < vec.size(); i++)
{
_Struct &elem = vec[i];
int len = elem.data.size(); // elem.data is [0]()
}
}
El cambio de tamaño (9) debería asignar 9 elementos de tipo _Struct. Y, de hecho, funciona. Pero cada elemento del tipo _Struct no se inicializa, especialmente el elemento de datos, que es otro std :: vector. Me gustaría que se inicialice en el std :: vector vacío. ¿Tienes que hacer eso manualmente? Pensé que el método resize() habría llamado el constructor predeterminado de cada elemento _Struct. Thx
Ps. Los nombres de las estructuras utilizadas aquí son solo las primeras cosas que me vienen a la mente. Esto es solo un ejemplo. Mi Visual Studio me dice que elem.data corresponde, en la vista de depuración, al [0]()
.
Ps. Olvídese de [0]()
.
Los identificadores que comienzan con un guión bajo seguido de una letra mayúscula están reservados para la implementación. –
No puedo imaginar que 'len = elem.data.size()' no falle si de alguna manera 'data' no se inicializa (lo que definitivamente debería ser). ¿Qué hay exactamente en 'data' y qué esperas que esté allí? – Jon
Los elementos en el vector se construyen por defecto sobre un 'resize' (para un entero esto da como resultado 0) Para su clase personalizada, debe definir su propio constructor predeterminado. –