У меня есть код, который добавляет к std::vector
и std::map
после создания объекта.
v.push_back(object); // std::vector
m[object->id] = object; // std::map
Я хочу, чтобы у этого была сильная гарантия исключения. Обычно для выполнения таких операций, как эти атомы, я бы использовал метод свопинга для каждого контейнера и вызывал все функции, которые могли бы бросать временные копии контейнера:
vector temp_v(v);
map temp_map(m);
temp_v.push_back(object);
temp_m[object->id] = object;
// The swap operations are no-throw
swap(temp_v, v)
swap(temp_m, m)
Однако создание временных копий всего вектора и карты кажется очень дорогостоящим. Есть ли способ реализовать надежную гарантию исключения для этой функции без дорогостоящих копий?