Вызовет ли метод vector.resize() конструкторы элементов по умолчанию при изменении размера?

Попробую такой код:

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]()
    }
}

The resize(9) должен выделять 9 элементов типа _Struct. И на самом деле это работает. Но каждый элемент типа _Struct не инициализируется, особенно элемент данных, который является еще одним std::vector. Хотелось бы, чтобы он был инициализирован на пустой std::vector. Обязательно делать это вручную? Я думал, что метод resize() вызовет конструктор по умолчанию для каждого элемента _Struct. Thx

Ps. Имена используемых здесь структур - это только первые вещи, которые приходят мне в голову. Это просто пример. В моей Visual Studio мне сказали, что elem.data в отладочном представлении соответствует [0]().

Пс. Забудьте про [0]().

9
задан Cœur 26 April 2017 в 15:31
поделиться