【发布时间】:2015-02-19 03:41:34
【问题描述】:
我有一个std::map,我想在其中插入一个对象,但我想避免不必要的复制,因为它是一个大对象,并且复制需要时间。
我试过这个:
MyPODType data(otherData);
data.modify();
myMap["Some key"] = data;
但是,这需要 2 个副本:一个用于复制 otherData,另一个在赋值运算符中用于插入对象。由于是POD,所以拷贝构造函数和赋值运算符都是默认的。
我怎样才能只用 1 个副本做到这一点?我意识到一些编译器会优化第二个副本,但我想以一种可移植的方式来做到这一点。
【问题讨论】:
-
myMap.emplace("Some key", otherData).first->second.modify(); -
谢谢!
emplace看起来正是我需要的。
标签: c++ c++11 copy-constructor assignment-operator stdmap