【发布时间】:2010-11-27 13:30:54
【问题描述】:
我听说过一些关于通过memcpy 将对象传送到另一个内存位置的警告,但我不知道具体原因。除非它包含的成员会根据内存位置做一些棘手的事情,否则这应该是完全安全的……或者不是?
编辑:预期的用例是像vector 这样的数据结构,它将对象(不是对象的指针)存储在连续的内存块(即数组)中。要在第 n 位置插入新对象,所有从位置 n 开始及以后的对象都需要移动,以便为插入的对象腾出空间。
【问题讨论】:
-
我曾经实现了一个容器 (spotep.com/dev/devector.h),在那里我想到了同样的事情,但我还没有找到一个不能“移动”的类。我能想到的唯一情况是,如果某个类以某种奇怪的方式注册了自己的内存位置,或者由指向自身的指针组成。我听说有 std::string 实现可以指向它们自己或堆上,但我还没有真正看到它..
-
如果移动内存不足的双向链表会崩溃。将节点中的指针与您来自的节点的地址进行异或的技巧将不起作用。
-
@Victor:在具有虚拟基类的 MI 场景中,如果运行时将对虚拟基类的引用存储为指针而不是偏移量,这可能会失败。
-
我不会搞乱向量之类的内部结构。
标签: c++ memory-management pointers