Non-copyable elements in vector

2019-01-12 05:56发布

I have a non-copyable class (i.e. the copy constructor & assignment operator are marked as 'delete'). I would like to keep these in a std::vector.

It is a RAII class so simply storing the pointer or reference to it is not what I am looking for.

My knowledge of the new initialiser lists & move constructors is somewhat limited, is this possible?

2条回答
Rolldiameter
2楼-- · 2019-01-12 06:18

Yes you can have std::vector<NotCopyable> if NotCopyable is movable:

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.

查看更多
乱世女痞
3楼-- · 2019-01-12 06:20

As long as the elements are movable then, yes, simply store them in the vector.

查看更多
登录 后发表回答