Приводит ли наличие вектора, содержащего структуры с неинициализированными членами, к неопределенному поведению?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Приводит ли наличие вектора, содержащего структуры с неинициализированными членами, к неопределенному поведению?

Сообщение Anonymous »

Если у вас есть вектор, содержащий структуры с неинициализированными членами, это неопределенное поведение. Контекстом для этого является вектор, который создается, но затем заполняется в параллельном контексте. Таким образом, инициализация вектора по умолчанию теряется.
Пример

Код: Выделить всё

template< typename T >
struct uninitialized
{
T t;
uninitialized(){};
uninitialized & operator=( T const & inT ){ t = inT             ; return *this; }
uninitialized & operator=( T      && inT ){ t = std::move( inT ); return *this; }
};

std::vector< uninitialized< int > > example()
{
auto vector = std::vector< uninitialized< int > >(500);

// Other code unrelated to vector

for( auto & element : vector ) element = 0; // For loop as stand in for potentially parallel context
// "0" is simply used as a stand in to keep the example simple

// Code which might use vector

return vector;
}
Следует отметить, что неинициализированные члены никогда не будут прочитаны до того, как они в конечном итоге будут инициализированы.
Если это имеет значение для ответчика, предполагаемое использование — для простые числовые типы, такие как int, или агрегатные типы, состоящие из этих числовых типов.
(Кроме того, чтобы избежать ненужных комментариев, Reserve + push_back не является здесь актуально, поскольку важен окончательный порядок вектора)

Подробнее здесь: https://stackoverflow.com/questions/787 ... d-to-undef
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»