首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么需要select_on_container_copy_construction?

为什么需要select_on_container_copy_construction?
EN

Stack Overflow用户
提问于 2019-01-15 00:03:47
回答 1查看 753关注 0票数 3

对于分配器,为什么需要select_on_container_copy_construction而不只是重载复制构造函数呢?

是否有实例需要定义两个独立的副本构造实现,具体取决于我们是否要复制实际的分配器和容器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 00:23:04

(你所指的特征实际上叫做select_on_container_copy_construction。)

标准库容器的副本构造函数实际上是重载的,并提供了一个分配器扩展版本:

代码语言:javascript
复制
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

然而,使用重载并不总是一种选择,通常情况下,分配器感知的容器应该可以轻松无缝地使用,就像您不知道分配器的选择一样。这意味着某些决策,例如如何分配容器副本,可能需要通过分配器类型而不是通过用户类型进行定制。

例如,您可以想象一种情况,即一个向量的内容都在一个(可能是可增长的)竞技场上,但是当您生成一个新的向量时,您会希望它进入一个新的单独的竞技场,而泛型代码不需要知道这一点。

这个库特性在实践中是否有用是一个单独的问题,但希望这说明为什么这个部分的设计有一些动机。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54190979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档