自己的自定义向量类. 内存重新分配

Own custom vector class. Memory reallocation

本文关键字:分配 新分配 自定义 向量 内存 自己的      更新时间:2023-10-16

我想实现我自己的简单向量类。此向量应支持推送新元素(类型T(,即使保留的内存已用尽。因此,我需要分配一个新的内存块,将元素复制到其中,然后释放旧的内存块。

如果我使用new T[]创建一个内存块,那么我必须使用delete[]释放它,这将使向量中每个元素的构造函数被调用。我不想要这样,因为我想到只是使用memcpy()复制旧向量.

因此,我想出了一个决定,即使用new char[]分配内存并使用放置 new来填充数组。当我需要重新分配保留的内存时,我只需在该内存块上使用memcpy(),然后使用delete[]释放它。

这是一个合理的解决方案吗?

只有某些对象应该(如在,允许(通过memcpy"复制"。这些称为普通类型- 不能具有自定义析构函数。

因此,使用memcpy来避免调用析构函数是矛盾的。只有当后者是不必要的时,你才被允许做前者。

考虑一下:一般来说,T可能有指向其自己的成员(或同一向量中的其他T(的指针/引用。如果您使用memcpy移动这些对象,这些对象将继续引用旧的(现在无效的(内存位置。这正是T的构造函数和析构函数必须处理的(如果甚至允许复制/移动它们(,因此省略它们会导致问题。