管理用新char*创建但用自定义分配器分配给std::vector元素的内存块

Managing memory block created with new char* but allocated to std::vector elements with custom allocator

本文关键字:vector std 元素 内存 分配器 char 创建 管理 自定义 分配      更新时间:2023-10-16

我一直在研究一个以连续方式存储向量的项目。我当前的设置有std::vectorcustom allocator,其中包含对memory management object的引用。

  • memory management object包含一个指向当前缓冲区的char*和一个std::vector,一旦缓冲区满了,我就把char *推到缓冲区。
  • 每个char*缓冲区由memory management objectnew调用创建。
  • 使用自定义分配器的std::vectors被包装在SmallVector类中。
  • SmallVectors是通过调用它们的类构造函数创建的,这些构造函数不包含任何newmalloc语句。

I delete是我在memory management object的析构函数中用new创建的char*'s,通过循环遍历包含char *sdelete-ing的向量。其他的事情会自己解决吗?即使是这样,对于这种情况,我是否可以采取更严格的内存管理步骤?

每个char*缓冲区由内存管理对象通过一个新的调用创建。

这应该是一个调用operator new (ref)来获得未初始化的内存(除非你知道这是你想要的)。

其他的事情会自己解决吗?

从你发布的信息来看,是的。只要确保你的分配器是CopyConstructable(基本上,allocator a; allocator b(a);工作)。

即使它会,是适当的,或者有更严格的内存管理步骤,我可以采取这种情况?

如果你坚持使用new,你可以使用std::unque_ptr来自动释放,或者如果你使用operator new,你可以使用std::unique_ptr来自定义删除器。

相关文章: