我一直致力于一个以连续方式存储向量的项目。我当前的设置custom allocator
为std::vector
,其中包含对memory management object
的引用。
memory management object
包含指向其当前缓冲区的char*
和std::vector
,其中一旦缓冲区已满,我将char *
推送到缓冲区。char*
缓冲区由memory management object
new
调用创建。std::vectors
包含在SmallVector
类中。SmallVectors
是通过调用其类构造函数创建的,这些构造函数不包含任何new
或malloc
语句。 delete
char*'s
我在new
的析构函数中使用memory management object
创建的char *s
循环遍历包含delete-ing
和{{1}的向量}} 每一个。其他一切都会照顾好自己吗?即使它会,这是正确的,还是我可以采取更严格的内存管理步骤?
答案 0 :(得分:0)
每个char *缓冲区由内存管理对象创建一个新的调用。
这应该是调用operator new
(ref)来获取未初始化的内存(除非你知道这是你想要的)。
其他一切都会照顾好自己吗?
根据您发布的内容,是的。只需确保你的分配器是CopyConstructable(基本上,allocator a; allocator b(a);
可以工作)。
即使它会,这是正确的,还是我可以采取更严格的内存管理步骤?
如果您坚持使用std::unque_ptr
,则可以使用new
进行自动释放,或者如果您使用std::unique_ptr
,则可以使用operator new
使用自定义删除工具。