拥有自定义矢量类.内存重新分配

Nik*_*ita 3 c++ memory memory-management vector

我想实现我自己的简单矢量类.T即使保留的内存耗尽,此向量也应支持推送新元素(类型).所以,我需要分配一个新的内存块,复制元素,然后释放旧的内存块.

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

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

这是合理的解决方案吗?

Max*_*hof 6

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

因此,使用memcpy以避免调用析构函数是矛盾的.如果不需要后者,你只能被允许做前者.

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