繁体   English   中英

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

[英]std::vector against std::vector with custom allocator

好吧,我将自己的分配器用于具有快速运行时要求的向量,以避免调用 new/delete。 现在的问题是这样的代码没有编译:

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

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

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

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

分配元素确实应该与分配器无关。 但是std::vector复制赋值运算符不仅仅为元素赋值——它还负责分配器。 所以它不应该是分配器独立的。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM