STL分配器需要这个构造函数形式(20.1.5):X a(b);具有要求Y(a) == b;
在标准实现中,这意味着,并实现为:
template<class U> allocator( const allocator<U> & o ) throw()
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么存在此要求.我知道分配器应该是静态的(没有任何状态),但为什么你能够像这样转换它们呢?
小智 6
允许来自其他分配器的构造,因为容器需要使用与您指定的不同的分配器类型.例如,列表和映射分配其内部节点类型而不是它们公开的value_type.
代码看起来类似于:
template<class T, class Alloc=std::allocator<T> >
struct Container {
typedef T value_type;
typedef Alloc allocator_type;
private:
struct Node {/*...*/};
typedef typename Alloc::template rebind<Node>::other RealAllocatorType;
RealAllocatorType allocator;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1635 次 |
| 最近记录: |