C++ – Non-copyable elements in vector


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?

Best Solution

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;


Live example.

Related Question