給定一個非無狀態自定義分配器A
(比如,競技場分配器,綁定到運行時已知大小的一些連續內存塊)和類S
,其中包含AllocatorAwareContainer類型的文件夾:對類AllocatorAwareContainer數據成員使用自定義分配器
struct S
{
A() = default;
// another c-tors
std::vector<T> v;
std::shared_ptr<U> s;
};
我想用A
的一個子集(甚至全部)AllocatorAwareContainerS
類的字段。很顯然,我應該爲S
類提供彼此模板參數,改變類型的所有有趣的數據成員的相應如下:
template< typename A = std::allocator<void> >
struct S
{
// c-tors
template< typename X >
using allocator = typename std::allocator_traits<A>::template rebind<X>::other;
std::vector< T, allocator<T> > v;
std::shared_ptr< U, allocator<U> > s;
};
什麼是目前的構造變化和額外的構造函數(假設A
不DefaultConstructible和任何其他可能的限制可能會成立)我應該嗎?
我應該將分配器A
存儲在類S
的其他字段嗎?
什麼是使用自定義分配器類的一般技巧?
會在這裏使用'std :: scoped_allocator_adaptor'嗎? – legends2k
@ legends2k:這很有可能。但是,我沒有使用標準容器的分配器,所以我不知道。 –
@ legends2k對於'std :: scoped-allocator_adaptor',應該有很多(部分)特殊化的'std :: uses_allocator'。 –
Orient