using std::map;
    map<string, int> mapStrToInt;
    {
            map<string, int> mapStrToInt2;
            mapStrToInt2[ "h1" ] = 100;
            mapStrToInt2[ "h2" ] = 200;
            mapStrToInt2[ "h3" ] = 300;
            mapStrToInt2[ "h4" ] = 400;

            mapStrToInt.insert( mapStrToInt2.begin( ), mapStrToInt2.end( ) );
            mapStrToInt.swap( mapStrToInt2 ); // is this code safe?
    }
    // at this point mapStrToInt2 has been destroyed.

问题>我已经在VS2013上测试了此代码,并且mapStrToInt的内容已与mapStrToInt2的内容互换。但是,我仍然要确认交换临时对象的内容是安全和合法的。

谢谢

最佳答案

这既安全又合法。交换两个容器的内容时​​,内容的所有权从一个变为另一个。因此,mapStrToInt的旧内容归临时对象所有,并在退出范围时不再存在,而临时内容的旧内容由mapStrToInt接管。

10-08 05:04