C++ 如何仅对move构造函数进行一次调用?

C++ 如何仅对move构造函数进行一次调用?,c++,c++11,move-semantics,unique-ptr,C++,C++11,Move Semantics,Unique Ptr,如何使下面的代码只调用移动构造函数一次 输出 MC MC 代码 #include <vector> #include <map> #include <memory> #include <iostream> struct Bar { Bar() { } Bar( Bar&& rhs ) { std::cerr << "MC\n";

如何使下面的代码只调用移动构造函数一次

输出

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 )));
}
#包括
#包括
#包括
#包括
结构条
{
Bar(){}
酒吧(酒吧和右酒吧)
{
标准:cerr m_v;
};
int main()
{
b栏;
std::map m;
m、 插入(std::make_pair(1,std::move(b));
}
编辑

MC
MC

看起来
emplace
是正确的答案-但不幸的是,它还不在gcc 4.7.2中……有没有什么方法可以将其别名为
insert
,然后在正确实施后将其删除?

基本上是使用
emplace
而不是
insert

m.emplace(1, std::move(b));
使用:


ack-我正在使用gcc 4.7.2-是否有解决方案或我可以做些什么来期待它的实现?嗯…我想我得到了一个
沙箱。cpp:27:4:错误:“class std::map”没有名为“emplace”的成员
-也许我的install@kfmfe04奇怪的是,我也知道;我可以发誓我已经用过了。不,t这里没有简单的解决方法,这也是standard需要此功能的原因之一。FWIW,这适用于clang(最新的Apple Xcode版本)。
map::emplace
似乎可以使用,如果您不介意安装非发布版本的话。@Praetorian+1 ty获取信息