不要想当然的认为移动函数是必然存在, 高效且可用的.

1. 当没有移动操作可使用时. 如果类的设计者把一个类的移动拷贝和移动运算符重载都声明为 delete, 那么你使用的所谓 "移动 构造函数函数/运算符" 实际上还是拷贝运算符.
2. 当移动没有拷贝块时有些情况下, 移动并不比拷贝快, 比如 面对 small string optimization (SSO) 的情况下("small" 意味着容量小于 15个字节) 这样的 small string 会储存在 string 对象的缓冲区中, 而不需要给它们在堆中分配空间. 在这种情况下, 移动就不见得比拷贝要快.
3. 移动函数不满足要求. 在一些情况中, 一些移动操作是要求执行移动的函数是声明 noexcept 的. 但是移动函数并没有声明是 noexcept.

posted @ 2015-01-08 00:05  wu_overflow  阅读(171)  评论(0编辑  收藏  举报