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

标签 c++ stl allocator

我正在使用提到的 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/

相关文章:

c++ - 为什么将 ReadProcessMemory() 与当前进程的句柄一起使用?

c++ - 使用临时初始化多个成员

c++ - FireBreath 和 ICE38

c++ - 使用分配器

c++ - 基于堆栈缓冲区的STL分配器?

c++ - std::basic_string 类型的 STL 容器

C++ 根据两个数据成员对对象进行排序

c++ - 将基场设置为零

c++ - 具有不同模板参数的模板对象的集合

c++ - C++ 20 [[no_unique_address]]在GCC中的错误?