【发布时间】:2016-01-08 15:40:15
【问题描述】:
有一个类似的对象:
std::map<std::string, MyClass> data;
其中 MyClass 的复制成本很高。 在某些应用程序运行流程时刻,我需要执行一个按键检索 MyClass 对象的操作(通常的 operator[]),但我需要从容器中撕下这个对象。 直接解决方案是复制到局部变量,然后在容器中擦除。但是对于 MyClass 来说,复制是一项繁重的操作。 有没有办法(可能在 C++11 术语中)避免复制/删除?可能有些将语义从容器移动到局部变量?不知道该怎么做。
【问题讨论】:
-
最简单的方法是将有效的移动语义添加到
MyClass。 -
你能告诉我这个技巧吗?我不是指 MyClass 的可移动 ctor,而是在我的情况下使用它,以防可移动 MyClass 已经实现
-
如果
MyClass已经是可移动的并且您有一个迭代器it指向相关元素,那么您可以将映射值移出到局部变量然后销毁该元素:@987654325 @