我正在使用提到的 STL 分配器 here .
我所做的唯一更改是我从一个名为 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 无效
提前致谢..:)
最佳答案
您将分配器的类型指定为模板参数,如果您不想要默认构造的分配器,则指定值作为构造函数参数:
std::vector<int,MyAlloc<int>> v((MyAlloc<int>(a)));
请注意,我添加了一对额外的括号以避免 "most vexing parse" .在这种情况下,我们无法避免使用大括号初始化,因为这将尝试使用初始化列表来填充 vector 。
关于c++ - 带有自定义构造函数的自定义 STL 分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575746/