为什么c++中的分配器为void类型提供专门化?
Why does allocator in c++ provide specialization for type void
我注意到c++中的分配器为void类型提供了专门化。这样做有什么特殊的目的吗?为void类型分配内存是没有意义的,对吧?
这篇由Matt Austern撰写的旧Standard Librarian专栏对分配器进行了相当全面的讨论,包括以下内容:
我们该如何处理void?有时容器必须引用void指针和重新绑定机制几乎提供了我们需要的东西,但是不完全是。它不起作用,因为我们需要写一些东西像malloc_allocator::pointer,我们已经定义了Malloc_allocator以这样的方式为void实例化它非法的。它使用sizeof(T),它指的是T&;两者都不合法T是空的。解决方案和问题一样简单:专门化malloc_allocator for void,除了空的引用void指针所需的最小值
malloc_allocator是Austern在示例中使用的示例实现,但它适用于一般情况。
分配器需要专门用于void
,因为您不能引用void
。
相关文章:
- 线程 std::调用未知类型,无法专门化函数错误
- 如何为所有非数组类型专门化模板?
- 如何在同一个模板功能上专门化几种类型?
- 如何为底层类型 int 的枚举专门化类
- 扣除指南的尾随回报类型不是专门化
- C++模板方法专门化联合类型
- 专门化模板数据类型的模板
- 无法专门化 std::hash 以unordered_map存储自定义类型
- 使用非类型模板参数进行专门化模板模板参数
- 使用decltype尾部返回类型专门化函数模板
- 是否可以为模板化类型专门化模板
- 按参数C++类型专门化重载构造函数
- 如何为从特定类型派生的类型专门化模板
- 用泛型返回类型专门化函数
- 如何为<T>用户定义的类型专门化 std::hash?
- 如何为所有引用类型专门化类
- 为一组类型专门化多个模板
- 如何为多个密钥类型专门化std映射
- 如何使用模板类型专门化模板功能
- c++谷物存档类型专门化不起作用