用临时地图交换地图实例是否安全?

时间:2014-10-10 15:25:50

标签: c++ stl

    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.

问题&GT;我已使用VS2013测试了此代码,mapStrToInt的内容已与mapStrToInt2的内容交换。但是,我仍然想确认交换临时对象的内容是安全的。合法的。

谢谢

1 个答案:

答案 0 :(得分:4)

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