带有自定义构造函数的自定义 STL 分配器

302*_*und 2 c++ stl allocator

我正在使用这里提到的 STL 分配器。
我所做的唯一更改是我从一个名为 Object 的基类继承,并且我使用基类的 new 和 delete 函数进行分配。

    class MyAlloc :public Object{
    ......
    }
Run Code Online (Sandbox Code Playgroud)

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

    MyAlloc(A *a) : Object(a) {
    ... }
Run Code Online (Sandbox Code Playgroud)

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

   A *a = new A();
   std::vector<int,MyAlloc<int> (a) > v;
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*our 5

您将分配器的类型指定为模板参数,如果您不想要默认构造的类型,则指定一个作为构造函数参数:

std::vector<int,MyAlloc<int>> v((MyAlloc<int>(a)));
Run Code Online (Sandbox Code Playgroud)

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