【发布时间】:2018-09-19 04:49:49
【问题描述】:
当使用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.
【问题讨论】:
-
你指的是
std::memcpy吗? -
将
memcpy与非 POD C++ 类一起使用充其量是有风险的(而且通常不仅仅是直接损坏) -
通常,如果您维护一个列表结构,您不会将元素存储在数组中。相反,您使用
new创建它们,然后它们只能通过遍历列表来访问。否则,你必须解决你所说的问题。那么,有没有机会,而不是解决它,你只是不需要数组访问,并且只使用列表访问就可以了吗? -
有用的关键字:
std::copy,复制构造函数,三法则。 -
memcpy复制 字节。 C++初学者不应该使用它。
标签: c++ arrays pointers memory memory-management