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

时间:2015-08-05 17:52:53

标签: c++ memory-management

我一直致力于一个以连续方式存储向量的项目。我当前的设置custom allocatorstd::vector,其中包含对memory management object的引用。

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

delete char*'s我在new的析构函数中使用memory management object创建的char *s循环遍历包含delete-ing和{{1}的向量}} 每一个。其他一切都会照顾好自己吗?即使它会,这是正确的,还是我可以采取更严格的内存管理步骤?

1 个答案:

答案 0 :(得分:0)

  

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

这应该是调用operator newref)来获取未初始化的内存(除非你知道这是你想要的)。

  

其他一切都会照顾好自己吗?

根据您发布的内容,是的。只需确保你的分配器是CopyConstructable(基本上,allocator a; allocator b(a);可以工作)。

  

即使它会,这是正确的,还是我可以采取更严格的内存管理步骤?

如果您坚持使用std::unque_ptr,则可以使用new进行自动释放,或者如果您使用std::unique_ptr,则可以使用operator new使用自定义删除工具。