是否可以有一个包含缓冲区的堆栈分配器?

问题描述 投票:0回答:1

我正在尝试实现一个可以与

std::vector
一起使用的堆栈分配器。有很多已经存在的实现,例如 thisthis。然而,它们都假设缓冲区不是成员,而是由用户提供给分配器的。 chromium 实现中的一条评论甚至说:

STL喜欢复制分配器,因此分配器本身无法保存数据。

我自己尝试了一下,

vector
在它的析构函数中崩溃了。看起来它为容器代理创建了我的分配器的临时版本,通过它分配内存,然后立即销毁它,使指向分配数据的指针成为悬空指针。

实际上可能有一个分配器将静态缓冲区存储为成员吗?

c++ memory-management allocator
1个回答
5
投票

实际上可能有一个分配器将静态缓冲区存储为成员吗?

如果分配器应该满足标准库中分配器感知容器(和其他实用程序)所需的Allocator标准库概念,那么不行,内存资源本身不能嵌入到分配器对象中。

其中一个要求是分配器对象可以自由复制构造,并且复制的分配器对象必须能够释放原始分配器对象分配的内存。只要副本仍然存在,销毁分配器对象本身也不会导致内存资源消失。

所以需要有一个间接的。用户自己管理内存资源的生命周期,并且分配器对象仅保存指向它的非拥有指针,或者您可以对分配器对象中的资源使用

shared_ptr
来让分配器对象复制共同拥有内存资源。但是,这当然不允许堆栈所有权。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.