Как set::emplace обрабатывает объекты, которые уже находятся в наборе?

У меня есть набор объектов, и я хочу использовать emplace для добавления объектов в набор. Если эквивалентный объект еще не существует в наборе, set::emplace создает объект и помещает его в набор. Если набор уже имеет эквивалентный объект, set::emplace не добавляет объект в список. В этом случае он создает объект и уничтожает его, создает его и пропускает, или не создает его вообще? Или это будет делать что-то еще?

C++ 11, gcc 4.7.0

2 ответа

Решение

Предполагается, что объект вообще не должен создаваться, но, как правило, все равно будет (конечно, с использованием libstd ++); технически это ошибка, но больше в стандарте, чем что-либо еще.

Более подробные сведения можно найти в предыдущем моем ответе на очень похожий вопрос:

Из § 23.2.4 Таблица 102 - Требования к ассоциативным контейнерам (в дополнение к контейнеру)

emplace(args)

Эффекты: вставляет value_type объект t построен с std::forward<Args>(args)... тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным ключу t,

Другие вопросы по тегам