allocator和容器实例构建过程

看到过几次,但一直对allocator的功能不甚了解。最近在看《Effective STL》的时候,看到里面提到了allocator以及示例代码,决定尝试去理解一下。

allocator本质是:在每个新的对象实例被加入到容器中时,容器所作的准备工作。如果你以为新添加对象实例时,容器只需要在insert函数中确认一下空间并new一个对象,那就大错特错了。
list为例,容器在新添加对象的时候,除了为对象保留足够的空间外,还需要创建指向上个结点与下个结点的指针。这种在每次添加新对象实例时都具备的重复工作,就由allocator完成。

我用User-Defined Allocator中的代码进行了测试。PS:这段代码太棒了,不足百行,简单清晰地演示了一般allocator需要完成的工作。

//自定义的allocator
namespace MyLib {
    template <class T>
    class MyAlloc {
    public:
        // type definitions
        typedef T        value_type;
        typedef T*       pointer;
        typedef const T* const_pointer;
        typedef T&       reference;
        typedef const T& const_reference;
        typedef std::size_t    size_type;
        typedef std::ptrdiff_t difference_type;

        // rebind allocator to type U
        template <class U>
        struct rebind {
            typedef MyAlloc<U> other;
        };

        // return address of values
        pointer address(reference value) const {
            return &value;
        }
        const_pointer address(const_reference value) const {
            return &value;
        }

        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值