为什么C++中的分配器(allocator)提供了void类型的特化?

13

我注意到C++中的分配器为void类型提供了特化。这样做有什么特殊目的吗?分配void类型的内存好像没有意义,对吧?


如果您发现一个答案有用,接受它被认为是这个网站的良好行为。 - Gnawme
2个回答

9
这篇由Matt Austern撰写的旧版《标准图书馆员》专栏涵盖了关于分配器的全面讨论,其中包括以下信息:

我们该如何处理void?有时容器必须引用void指针,而重新绑定机制几乎可以提供我们所需的内容,但却不完全适用。它行不通,因为我们需要编写类似于malloc_allocator :: pointer的东西,而我们已经定义了malloc_allocator,使得对void进行实例化是非法的。它使用sizeof(T),并引用T&;当T为void时,两者都是非法的。解决方案与问题一样简单:为void专门化malloc_allocator,省略除了最基本的引用void指针之外的所有内容。

malloc_allocator是Austern在他的示例中使用的样例实现,但对于一般情况仍然适用。

2

分配器需要为void进行特化,因为无法引用void


尽管如此,如果有人为 void 实例化它,那只会成为一个问题,不是吗? - Owen
1
allocator<void>在哪里使用?你能给我一个例子吗? - Xiaotian Pei

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接