k h*_*ang 3 c++ move heap-memory move-semantics
我对移动语义的直觉是对象字段的浅层复制,然后可能是对旧 r 值的一些破坏。然而,据我所知,当某些字段拥有指针/引用时,只有浅拷贝/深拷贝存在差异。如果您根本不使用堆,所以没有mallocor new,那么您可能不会有拥有指针的类/结构。因此,移动构造函数与常规复制构造函数没有任何区别。我的逻辑正确吗?
是的,它对于管理任何类型资源的所有权都很有用,而不仅仅是堆内存。
例如,(打开)std::ofstream表示打开文件的输出流的所有权。能够复制这样的流是没有意义的,因此它是不可复制的。但仍然可以std::ofstream通过移动构造/分配将流的所有权从一个对象转移到另一个对象。