当前位置 : 主页 > 编程语言 > c++ >

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

来源:互联网 收集:自由互联 发布时间:2021-06-23
我想实现我自己的简单矢量类.即使保留的内存耗尽,此向量也应支持推送新元素(类型为T).所以,我需要分配一个新的内存块,复制元素,然后释放旧的内存块. 如果我使用新的T []创建一个内
我想实现我自己的简单矢量类.即使保留的内存耗尽,此向量也应支持推送新元素(类型为T).所以,我需要分配一个新的内存块,复制元素,然后释放旧的内存块.

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

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

这是合理的解决方案吗?

只有某些对象应该(通过,允许)通过memcpy“复制”.这些被称为 trivial types – 它不能有自定义析构函数.

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

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

网友评论