为什么需要select_on_container_copy_construction
Why is select_on_container_copy_construction needed?
对于分配器,为什么需要select_on_container_copy_construction
而不是仅仅重载复制构造函数?
当我们想根据是否复制实际的分配器与容器来定义两个独立的复制构造实现时,是否存在实例?
(您所指的特征实际上被称为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
然而,使用重载并不总是一种选择,而且通常情况下,具有分配器意识的容器应该可以像您不知道分配器的选择一样轻松无缝地使用。这意味着某些决策,例如如何分配容器的副本,可能需要直接通过分配器类型进行自定义,而不是通过用户的类型进行自定义。
例如,你可以想象一种情况,一个向量的内容都进入一个(可能是可生长的)竞技场,但当你制作一个新向量时,你希望它进入一个新的、独立的竞技场,通用代码不需要知道这一点。
这个库功能在实践中是否有用是一个单独的问题,但希望这能说明为什么这个零件设计有一些动机。
相关文章:
- std::filesystem::copy throws filesystem_error
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- std::p mr::memory_resource 如何与 std::container 产生性能差异?
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- QML/C++/QObject Struct Copy
- C++ "oldstyle container ":指针/数组/新 - 可能误会?
- 在其他容器中使用 boost::container::static_vector 时,GCC 编译错误"将'const s'绑定到类型's&'的引用丢弃限定符"
- C++赋值运算符,我们可以用 copy 替换它吗?
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- 如何使用 std::copy 当类有"无符号字符和运算符[]"时
- std::copy 导致运行时检查失败 #2
- 构造函数是否有一种现代C++方法来了解其'container'类?
- 为什么 Clang 在命名空间'std'中没有名为 'copy' 的成员给出错误
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 为什么使用 <uint8_t>MSVC 2015 编译器的 std::vector::insert 比 std::copy 快 5 倍?
- 为什么std::{container}::template不能推导其参数类型
- 对于输出,std::copy是否比std::cout快
- C++中的'deep copy'构造函数
- 复制初始化:为什么即使关闭了复制省略,也没有调用move或copy构造函数