对于分配器,为什么需要select_on_container_copy_construction而不只是重载复制构造函数呢?
是否有实例需要定义两个独立的副本构造实现,具体取决于我们是否要复制实际的分配器和容器?
发布于 2019-01-15 00:23:04
(你所指的特征实际上叫做select_on_container_copy_construction。)
标准库容器的副本构造函数实际上是重载的,并提供了一个分配器扩展版本:
A a1 = f(), a2 = g(); // allocators
std::vector<int, A> v1(a1);
std::vector<int, A> v2(v1, a2); // allocator-extended copy
std::vector<int, A> v3 = v1; // regular copy, uses select_on_container_copy_construction然而,使用重载并不总是一种选择,通常情况下,分配器感知的容器应该可以轻松无缝地使用,就像您不知道分配器的选择一样。这意味着某些决策,例如如何分配容器副本,可能需要通过分配器类型而不是通过用户类型进行定制。
例如,您可以想象一种情况,即一个向量的内容都在一个(可能是可增长的)竞技场上,但是当您生成一个新的向量时,您会希望它进入一个新的单独的竞技场,而泛型代码不需要知道这一点。
这个库特性在实践中是否有用是一个单独的问题,但希望这说明为什么这个部分的设计有一些动机。
https://stackoverflow.com/questions/54190979
复制相似问题