安全地移动C++对象

Ton*_*ony 4 c++ pointers memory-management

我听到过一些警告,反对将物品运送到另一个记忆位置memcpy,但我不知道具体原因.除非其包含的成员做依赖于内存位置的棘手事情,否则这应该是非常安全的......或者不是吗?

编辑:预期的用例是像a的数据结构vector,它将对象(不是指向对象的指针)存储在连续的存储器块(即数组)中.要在第n个位置插入新对象,需要移动从位置n和更高位置开始的所有对象,以便为要插入的对象腾出空间.

Jar*_*Par 6

你不应该这样做的一个主要原因是析构函数.当您将C++对象memcpy到内存中的另一个位置时,您将在内存中最终得到2个版本的对象,其中只运行了1个构造函数.这将破坏几乎每个C++类的资源释放逻辑.

  • 具有自动存储持续时间的对象在超出范围时会自动调用它们的析构函数. (2认同)