复制构造函数和移动语义之间的 C++ 区别
C++ difference between copy constructors and move semantics
为什么要使用基于移动语义的复制构造函数?我的意思是我可以使用非常量引用并做同样的事情:从对象中获取数据而不进行复制。或者没有?
嗯,是的,你可以 - auto_ptr 尝试过,例如 - 但效果不是很好:例如,你不能将具有这种破坏性副本的对象放入标准容器中,因为标准容器可能需要一个不会破坏原件的副本。如果例如,那将是令人惊讶的。插入破坏了源对象,但另一方面,在某些情况下(比如当源是临时的)移动非常有意义。所以像往常一样,C++ 允许这两种情况(插入对于复制和移动而言过载)并允许(有些人会说 "forces")您在它们之间进行选择。
为什么要使用基于移动语义的复制构造函数?我的意思是我可以使用非常量引用并做同样的事情:从对象中获取数据而不进行复制。或者没有?
嗯,是的,你可以 - auto_ptr 尝试过,例如 - 但效果不是很好:例如,你不能将具有这种破坏性副本的对象放入标准容器中,因为标准容器可能需要一个不会破坏原件的副本。如果例如,那将是令人惊讶的。插入破坏了源对象,但另一方面,在某些情况下(比如当源是临时的)移动非常有意义。所以像往常一样,C++ 允许这两种情况(插入对于复制和移动而言过载)并允许(有些人会说 "forces")您在它们之间进行选择。