簡體   English   中英

allocator_traits的目的是什么 <T> 在C ++ 0x?

[英]What is the purpose of allocator_traits<T> in C++0x?

為什么不是標准的C ++ 03接口來查詢C ++ 0x中使用的分配器的成員類型? 成員類型不足的用例有哪些?

我對這種事情一點都不熟悉( 根本沒有 ),但這篇文章似乎是一個很好的起點,可以掌握allocator_traits背后的基本原理:

該提議的基石是定義包含類型的allocator_traits模板和使用分配器的靜態成員函數, 有效地取代了在法蘭克福丟失的Allocator概念

要根據設計模式解釋allocator_traits,它的一個適配器可以包裝你的自定義分配器,它滿足更少的實現要求(不需要構造,銷毀,所有那些typedef ...)並將其轉換為完成其余部分的FlyWeight對象。具有靜態成員和類型的Allocator實現要求。

使用allocator_traits,您只需要為自定義分配器提供至少10行代碼,如open-std doc Scoped Allocator Model的第3頁(對於@icecrime提及)。

我認為allocator_traits和allocator是將非FlyWeight對象轉換為FlyWeight的一個很好的現實示例,以減輕實現細節的負擔。 它是一個很好的API設計實踐,可以將一個類變成FlyWeight,它本來應該是FlyWeight。

對於Java程序員來說,就設計模式而言,std :: allocator_traits就像包私有類CharacterDataLatin1,ChracterData00,CharacterData0E,01,02 ......繼承自java.lang.CharacterData以提供靜態Unicode定義和助手。由Character(std :: allocator)類的每個實例共享。

編輯 :通過allocator_traits間接調用自定義分配器的另一個好處是它保證了foward兼容性( Scoped Allocator Model的第3頁)。 未來的需求數量可能會增長,即使您對分配器實現新需求一無所知,這些需求也已經存在於編譯器制造商實現的allocator_traits中。 知道C ++容器通過allocator_traits間接調用allocator,使用自定義分配器的STL容器將從新需求中受益,而無需更改代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM