c++ - vector 中的不可复制元素

标签 c++ c++11 stl move-semantics

我有一个不可复制的类(即复制构造函数和赋值运算符被标记为“删除”)。我想将这些保存在 std::vector 中。

它是一个 RAII 类,所以简单地存储指针或对它的引用不是我想要的。

我对新的初始化列表和 move 构造函数的了解有些有限,这可能吗?

最佳答案

是的,您可以拥有 std::vector<NotCopyable>如果 NotCopyable是可 move 的:

struct NotCopyable
{
    NotCopyable() = default;
    NotCopyable(const NotCopyable&) = delete;
    NotCopyable& operator = (const NotCopyable&) = delete;

    NotCopyable(NotCopyable&&) = default;
    NotCopyable& operator = (NotCopyable&&) = default;
};

int main()
{
    std::vector<NotCopyable> v;
    NotCopyable nc;

    v.push_back(NotCopyable{});
    v.emplace_back();
    v.push_back(std::move(nc));
}

Live example .

关于c++ - vector 中的不可复制元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906014/

相关文章:

c++ - Openwrt工具链搭建机

c++ - 如何在控制台上打印数字为0-99的简单数组

c++ - 何时为多态类初始化 vptr(指向 vtable)?

c++ - 类成员初始化是在编译时还是运行时进行?

c++ - 使用 dynamic_pointer_cast 时无法动态转换

c++ - 大多数签名/未签名警告的可接受修复?

c++ - 像素在自行初始化时移动,但不在循环中移动?

c++ - 告诉 gcc/g++ 编译器删除孤立函数

c++ - 为什么这个线程安全队列会造成死锁?

c++ - 在运行时确定 std::map/std::set 的内存使用