【发布时间】:2013-03-09 17:42:55
【问题描述】:
如何让下面的代码只调用移动构造函数一次?
输出
MC
MC
代码
#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,然后在正确时将其删除实施了吗?
【问题讨论】:
-
map::emplace似乎可以与gcc 4.8.0 一起使用,如果您不介意安装非发布版本的话。 -
@Praetorian +1 获取信息
标签: c++ c++11 move-semantics unique-ptr