为什么c ++中的allocator为void类型提供特化

时间:2011-08-22 06:23:48

标签: c++ stl allocator

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

2 个答案:

答案 0 :(得分:9)

Matt Austern的这篇旧Standard Librarian专栏对一般的分配器进行了相当全面的讨论,包括这一点:

  

我们如何处理无效?有时容器必须引用void   指针和重新绑定机制几乎给了我们所需要的东西,但是   不完全的。它不起作用,因为我们需要写一些东西   像malloc_allocator :: pointer,我们已经定义了   malloc_allocator以这样的方式实例化它是为了void   非法。它使用sizeof(T),它指的是T&amp ;;两者都不合法   T无效。 解决方案就像问题一样简单:专业化   malloc_allocator for void ,除了裸露之外的所有东西   我们需要引用void指针的最小值。

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

答案 1 :(得分:2)

分配器需要专门用于void,因为您无法引用void