【问题标题】:What are the standard containers that do not require CopyAssignable/CopyConstructible?什么是不需要 CopyAssignable/CopyConstructible 的标准容器?
【发布时间】:2017-06-06 18:28:48
【问题描述】:

直到 C++11,我认为 std::vector<T> 要求 T 是 CopyAssignable 和 CopyConstructible 的基本操作(扩展容量需要将对象复制到另一个内存位置)。但如果你这样做v1 = v0,我认为它会实际复制这些值。

是否有任何标准容器不需要其value_type 的任何功能是可分配和可复制的?

换一种说法,我有一个不可复制/不可分配的类型,哪些容器可以安全地便携使用以及在多大程度上?

【问题讨论】:

    标签: c++11 containers


    【解决方案1】:

    来自cppreference.com

    对元素的要求取决于对容器执行的实际操作。一般要求元素类型是完整类型,满足Erasable的要求,但很多成员函数要求更严格。

    值得注意的是std::vector<std::unique_ptr<T>>(对于一些完整的 T)是一个非 CopyAssignable / 非 CopyConstructible 容器。

    【讨论】:

    • 它实际上没有:我有一个带有删除复制构造函数的类,并且相同的代码在 g++ 6/7 中运行良好,但在 g++ 5.4 中失败。可能是因为副本已被移动取代。
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多