13

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

4

2 回答 2

9

Matt Austern 的这个旧的标准图书馆员专栏对一般的分配器进行了相当彻底的讨论,包括这个花絮:

我们如何处理空虚?有时容器必须引用 void 指针,而重新绑定机制几乎可以满足我们的需要,但并不完全。它不起作用,因为我们需要编写类似 malloc_allocator::pointer 的东西,而且我们已经定义了 malloc_allocator,以致将它实例化为 void 是非法的。它使用sizeof(T),它指的是T&;当 T 无效时也不合法。解决方案就像问题一样简单:将 malloc_allocator 专门用于 void,除了我们需要引用 void 指针的最低限度之外的所有内容都省略了。

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

于 2011-08-22T06:36:17.000 回答
2

分配器需要专门化,void因为您不能引用void.

于 2011-08-22T06:32:50.470 回答