对于以节点为构造基础的容器(node-based)例如list,set,mutilset,map和multimap以及无序容器。如果节点构造失败,容器将保持不变,这其中,如果插入多个元素除了list是事务安全的,其他并不安全
对于以array构造基础的容器如array、vector和deque,安插元素如果失败,不可能做到完全回滚。
提供一种外覆器的实现,实现容器的 “commit-or-rollback”
template<typename T,typename Cont,typename Iter>
void insert(Cont& coll,const Iter& pos,const T& value)
{
Cont tmp(coll);
try{
coll.insert(pos,value);
}
catch(…)
{
coll.swap(tmp);
throw;
}
}