我注意到c ++中的allocator为void类型提供了特化。这样做有什么特别的目的吗?为void类型分配内存没有意义,对吗?
答案 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
。