gpt4 book ai didi

c++ - C++0x 中 allocator_traits 的目的是什么?

转载 作者:IT老高 更新时间:2023-10-28 23:17:37 26 4
gpt4 key购买 nike

为什么没有标准 C++03 接口(interface)用于查询 C++0x 中使用的分配器的成员类型?成员类型不足的用例有哪些?

最佳答案

为了从设计模式的角度解释 allocator_traits,它是 Adapter包装满足更少实现要求的自定义分配器(不需要构造,销毁,所有那些 typedef ...)并将其转换为 FlyWeight使用静态成员和类型为您完成分配器实现要求的其余部分的对象。

根据 open-std doc Scoped Allocator Model 的第 3 页,使用 allocator_traits,您只需为自定义分配器提供至少 10 行代码。 (感谢@icecrime 提及)。

我认为 allocator_traits 和 allocator 是一个很好的现实世界示例,将非 FlyWeight 对象转换为 FlyWeight 以减轻实现细节的负担。它是一个很好的 API 设计实践,可以将一个类转变为本来应该是 FlyWeight 的 FlyWeight。

对于 Java 程序员来说,就设计模式而言,std::allocator_traits 就像包私有(private)类 CharacterDataLatin1, ChracterData00, CharacterData0E, 01, 02 ... 继承自 java.lang.CharacterData 以提供静态 Unicode 定义和帮助器将由 Character (std::allocator) 类的每个实例共享。

编辑:通过 allocator_traits 间接调用自定义分配器的另一个优点是它保证了前向兼容性(Scoped Allocator Model 的第 3 页)。requirements的数量将来可能会增长,即使您不了解对分配器实现新要求,这些要求也已经存在于编译器制造商实现的 allocator_traits 中。知道 C++ 容器通过 allocator_traits 间接调用分配器,使用自定义分配器的 STL 容器将受益于新要求,而无需您更改代码。

关于c++ - C++0x 中 allocator_traits<T> 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4502691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com