向量中的不可复制元素

时间:2014-11-13 09:59:19

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

我有一个不可复制的类(即复制构造函数和赋值运算符被标记为'delete')。我想将它们保存在std :: vector中。

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

我对新初始化列表的了解&移动构造函数有点受限,这可能吗?

2 个答案:

答案 0 :(得分:18)

是的,如果std::vector<NotCopyable>可移动,您可以NotCopyable

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

答案 1 :(得分:2)

只要这些元素是可移动的,是的,只需将它们存储在向量中即可。