我很好奇移动对象的描述在C ++ ISO文档中。我只看到有关rvalue引用,移动构造函数,移动赋值运算符及其语法的信息。我找不到“移动”被描述为在对象之间移动资源的官方原因。
答案 0 :(得分:4)
来自http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1377.htm:
移动语义主要是关于性能优化:能够将昂贵的对象从内存中的一个地址移动到另一个地址,同时窃取源的资源以便以最少的费用构建目标。
在一定程度上,当前语言和库中已存在移动语义:
- 在某些情况下复制构造函数elision
- auto_ptr" copy"
- 列表::剪接
- 交换容器
所有这些操作都涉及将资源从一个对象(位置)转移到另一个对象(至少在概念上)。缺少的是统一的语法和语义,以使通用代码能够移动任意对象(就像今天的通用代码可以复制任意对象一样)。标准库中有几个地方可以通过移动对象而不是复制它们来获得极大的好处(将在下面深入讨论)。