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?
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.
As long as the elements are movable then, yes, simply store them in the vector.