自己的自定义向量类. 内存重新分配
Own custom vector class. Memory reallocation
我想实现我自己的简单向量类。此向量应支持推送新元素(类型T
(,即使保留的内存已用尽。因此,我需要分配一个新的内存块,将元素复制到其中,然后释放旧的内存块。
如果我使用new T[]
创建一个内存块,那么我必须使用delete[]
释放它,这将使向量中每个元素的构造函数被调用。我不想要这样,因为我想到只是使用memcpy()
复制旧向量.
因此,我想出了一个决定,即使用new char[]
分配内存并使用放置 new来填充数组。当我需要重新分配保留的内存时,我只需在该内存块上使用memcpy()
,然后使用delete[]
释放它。
这是一个合理的解决方案吗?
只有某些对象应该(如在,允许(通过memcpy
"复制"。这些称为普通类型- 不能具有自定义析构函数。
因此,使用memcpy
来避免调用析构函数是矛盾的。只有当后者是不必要的时,你才被允许做前者。
考虑一下:一般来说,T
可能有指向其自己的成员(或同一向量中的其他T
(的指针/引用。如果您使用memcpy
移动这些对象,这些对象将继续引用旧的(现在无效的(内存位置。这正是T
的构造函数和析构函数必须处理的(如果甚至允许复制/移动它们(,因此省略它们会导致问题。
相关文章:
- 新分配指向函数的指针是否合法?
- 变体 - 分配新值时是否清理旧值?
- 分配新的零大小数组可以具有有效价值吗?
- 当我尝试为结构分配新指针时出现堆栈溢出错误
- 在函数返回中返回对新分配的shared_ptr的尊重合法吗
- 如何删除新分配的字符,这也是函数返回值?
- C ++中新分配的int的内存大小,有没有不同更好的方法来查看它?
- OpenSSL:当输出ptr为空时,BIGNUM的bin2bn不会分配新的BIGNUM
- 每次我分配新的位置时,都会隐式地称为destuructor
- 为什么这个指针到指针的二维数组像这样分配新的 int
- 如何创建对象变量,以便每次分配新的指针
- C 新操作员分配新内存
- 编译器忽略运算符新分配
- 方法向量的新/分配的复杂性::p ush_back
- 有没有一种方法可以全局填充新分配/删除分配
- 调用时为 std::function 分配新值
- 为什么我的新分配指针会自动在程序退出上删除
- 如果我尚未为指针分配新值,是否需要删除指针?
- OpenCV:为矩阵元素分配新值
- 在避免新分配的同时,const变量的复杂初始化