У меня есть набор объектов, и я хочу использовать emplace для добавления объектов в набор. Если эквивалентный объект еще не существует в наборе, set :: emplace создает объект и помещает его в набор. Если набор уже имеет эквивалентный объект, set :: emplace не добавляет объект в список. В этом случае, он создает объект и уничтожает его, создает его и пропускает его, или не создает его вообще? Или это будет делать что-то еще?
C ++ 11, gcc 4.7.0
Он вообще не должен создавать объект, но, как правило, все равно будет (конечно, используя libstd ++); технически это ошибка, но больше в стандарте, чем что-либо еще.
Более подробные сведения можно найти в предыдущем моем ответе на очень похожий вопрос:
Из § 23.2.4 Таблица 102 — Требования к ассоциативным контейнерам (в дополнение к контейнеру)
emplace(args)
Эффекты: вставляет
value_type
объектt
построен сstd::forward<Args>(args)...
тогда и только тогда, когда в контейнере нет элемента с ключом, эквивалентным ключуt
,