C ++ memcopy是否将内存地址复制到另一个数组?

时间:2018-04-09 17:52:53

标签: c++ arrays pointers memory memory-management

使用memcopy时,它只是复制数组中的对象还是复制对象的内存地址并将其放在新数组中?

如果没有办法复制数组中对象的地址?

以下是数组定义:

private:
Node<T>* m_data;
long     m_size; 
bool     m_asc; 
Node<T>* m_curr;

我有一个插入m_data的方法,但有时m_data需要扩展,然后复制到临时数组。问题在于,Node类定义(如下所示)通过保存指针来连接数组中的连续元素。如果我将一个列表的元素复制到另一个列表,则会更改其内存地址,这会导致使用未反映在数组元素中的指针进行更改。有办法解决这个问题吗?

Node<T>* m_next; // pointer to successor element. 
Node<T>* m_prev; // pointer to predecessor element.

1 个答案:

答案 0 :(得分:1)

从历史上看,memcpy()仅用于复制内存块,而没有任何假设“内容字节本质上应该是什么”。所以,经验法则:

  • 可以通过memcpy复制普通旧数据(又名POD)。但是,这并不意味着你只能这样做 - STL容器也能满足你的需求(对于初学者来说可能是更好的选择)。
  • 在任何其他情况下,您必须使用STD容器,如std :: vector左右。否则,你会遇到麻烦。