当前位置:  开发笔记 > 编程语言 > 正文

为什么这个C++ STL分配器不分配?

如何解决《为什么这个C++STL分配器不分配?》经验,为你挑选了1个好方法。

我正在尝试编写一个派生自定义的STL分配器std::allocator,但不知何故所有调用都要allocate()转到基类.我把它缩小到这段代码:

template  class a : public std::allocator {
public:
    T* allocate(size_t n, const void* hint = 0) const {
        cout << "yo!";
        return 0;
    }
};

int main()
{
    vector> v(1000, 42);
    return 0;
}

我期待"哟!" 打印,然后是一些可怕的错误,因为我实际上没有分配任何东西.相反,该程序运行良好,并没有打印.我究竟做错了什么?

我在gcc和VS2008中得到了相同的结果.



1> Johannes Sch..:

您需要提供重新绑定成员模板以及C++标准中分配器要求中列出的其他内容.例如,您需要一个模板复制构造函数,它不仅可以接受allocator,还可以接受allocator.例如,一个代码可能会执行,例如std :: list可能会执行此操作

template
void alloc1chunk(Allocator const& alloc) {
    typename Allocator::template rebind<
        wrapper
      >::other ot(alloc);
    // ...
}

如果没有正确的重新绑定模板,或者没有相应的复制构造函数,代码将失败.猜测要求是什么,你将无处可用.迟早你将不得不处理依赖于那些分配器要求的一部分的代码,并且代码将因为你的分配器违反它们而失败.我建议你在一些工作草案中看一下你的标准副本20.1.5.

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有