Sto provando il seguente codice:Il metodo vector.resize() chiama i costruttori di elementi predefiniti durante il ridimensionamento?
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]()
}
}
Il ridimensionamento (9) dovrebbe assegnare 9 elementi di tipo _Struct. E, in effetti funziona. Ma ogni elemento di tipo _Struct non è inizializzato, specialmente l'elemento data, che è un altro std :: vector. Mi piacerebbe che fosse inizializzato allo std :: vector vuoto. Devo farlo manualmente? Ho pensato che il metodo resize() avrebbe chiamato il costruttore predefinito di ogni elemento _Struct. Thx
Ps. I nomi delle strutture qui usate sono solo le prime cose che mi vengono in mente. Questo è solo un esempio. My Visual Studio mi informa che elem.data corrisponde, nella vista di debug, a [0]()
.
Ps. Dimentica il [0]()
.
Gli identificatori che iniziano con un trattino basso seguito da una lettera maiuscola sono riservati per l'implementazione. –
Non riesco a immaginare 'len = elem.data.size()' non si blocca se in qualche modo 'data' non è stato inizializzato (cosa che dovrebbe essere sicuramente). Cosa c'è esattamente in 'data' e cosa ti aspetti di essere lì dentro? – Jon
Gli elementi nel vettore sono predefiniti costruiti su un 'ridimensionamento' (per un numero intero questo risulta in 0) Per la classe personalizzata, è necessario definire il proprio costruttore predefinito. –