自定义STL分配器与自定义构造函数

时间:2013-09-02 14:41:49

标签: c++ stl allocator

我正在使用提到here的STL分配器。
我正在做的唯一改变是我继承了一个名为Object的基类,我使用基类'new和delete函数进行分配。

    class MyAlloc :public Object{
    ......
    }

我想使用基类的参数化构造函数,它将基于发送到STLAllocator的参数,这将是这样的。

    MyAlloc(A *a) : Object(a) {
    ... }

然后使用这个构造函数,如:

   A *a = new A();
   std::vector<int,MyAlloc<int> (a) > v;

我无法实现这一目标。这导致编译错误:左'a'不能出现在常量表达式中模板参数2无效
提前感谢.. :))

1 个答案:

答案 0 :(得分:4)

您将分配器的类型指定为模板参数,如果您不想使用默认构造的,则将指定为构造函数参数:< / p>

std::vector<int,MyAlloc<int>> v((MyAlloc<int>(a)));

请注意,我添加了一对额外的括号以避免"most vexing parse"。在这种情况下,我们无法避免使用大括号初始化,因为这将尝试使用初始化列表来填充向量。