Оба безопасны, поскольку push_back скопирует значение, а не ссылку. Если вы храните указатели, это все еще безопасно для вектора, но просто знайте, что у вас будут два элемента вашего вектора, указывающие на одни и те же данные.
Раздел 23.2.1 Общие требования к контейнерам
16
- a.push_back (t) Добавляет копию t. Требуется: T должен быть CopyInsertable в X.
- a.push_back (rv) Добавляет копию rv. Требуется: T должен быть MoveInsertable в X.
Поэтому реализации push_back должны гарантировать, что вставлена копия v[0]
. В противоположном примере, если предположить, что реализация будет перераспределяться перед копированием, она не обязательно добавит копию v[0]
и, как таковая, нарушит спецификации.
push_back
. Другой автор заметил в нем ошибку , которая не соответствовала описанному вами случаю. Насколько я могу судить, никто другой не утверждал, что это не ошибка. Не говорю, что это неопровержимое доказательство, просто наблюдение.