std::vector与带有自定义分配器的std::vector



我正在为一个向量使用我自己的分配器,该向量具有快速运行时要求,以避免调用new/delete。现在的问题是,像这样的代码没有编译:

std::vector<char> x(1000);
std::vector<char,myalloc<char>> y(1000);
x = y;

这显然是因为std::vector的分配器的实现是编译时的,并且会更改类型。但是像上面这样的代码应该是独立于分配器的。

对于POD,我当然可以做记忆,但还有其他方法吗?我真的很接近于实现我自己的向量,它将使用在运行时指定的自定义分配器动态,并去掉std::vector。

但是像上面这样的代码应该是独立于分配器的。

分配元素确实应该与分配器无关。但是std::vector的拷贝分配操作符不仅仅是分配元素—它还负责分配器。所以它不应该是独立于分配器的。

std::vector确实提供了一个仅用于分配元素的接口:assign成员函数。它可以这样使用:

x.assign(y.begin(), y.end());

自从C++17以来,多态分配器允许感知分配器的容器具有类型擦除分配器支持,因此您可以一致地使用std::pmr::vector<char>,但它有一些问题需要考虑—类型擦除、不同分配器传播语义、不同接口等的开销。

最新更新