Merged revisions 52224 via svnmerge from

https://svn.boost.org/svn/boost/trunk

........
  r52224 | danieljames | 2009-04-06 23:51:36 +0100 (Mon, 06 Apr 2009) | 1 line
  
  Avoid an unnecessary copy in 'operator[]'
........


[SVN r52346]
This commit is contained in:
Daniel James
2009-04-12 10:25:38 +00:00
parent b475ba05c0
commit ab62d33495

View File

@ -215,6 +215,22 @@ namespace boost {
}
#endif
template <typename K, typename M>
void construct_pair(K const& k, M*)
{
BOOST_ASSERT(!node_);
node_constructed_ = false;
value_constructed_ = false;
node_ = allocators_.node_alloc_.allocate(1);
allocators_.node_alloc_.construct(node_, node());
node_constructed_ = true;
new(node_->address()) value_type(k, M());
value_constructed_ = true;
}
node_ptr get() const
{
BOOST_ASSERT(node_);
@ -1757,7 +1773,7 @@ namespace boost {
// Create the node before rehashing in case it throws an
// exception (need strong safety in such a case).
node_constructor a(data_.allocators_);
a.construct(value_type(k, mapped_type()));
a.construct_pair(k, (mapped_type*) 0);
// reserve has basic exception safety if the hash function
// throws, strong otherwise.