如何使下面的代码只调用一次移动构造函数?
输出
MC
MC
CODE
#include <vector>
#include <map>
#include <memory>
#include <iostream>
struct Bar
{
Bar() { }
Bar( Bar&& rhs )
{
std::cerr << "MC\n";
for( auto& p : rhs.m_v )
{
std::cerr << "inside loop\n";
m_v.push_back( move( p ));
}
}
std::vector< std::unique_ptr< Bar >> m_v;
};
int main()
{
Bar b;
std::map<int,Bar> m;
m.insert( std::make_pair( 1, std::move( b )));
}
修改
看起来emplace
是正确的答案 - 但不幸的是,它还没有在gcc 4.7.2中......有一些方法我可以将其别名为insert
然后删除它何时正确实施?
答案 0 :(得分:7)
m.emplace(1, std::move(b));
答案 1 :(得分:4)
基本上使用emplace
代替insert
:
m.emplace(1, std::move(b));