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?
A class called non-copyable is defined which has a private copy constructor and copy assignment operator.
Formally, a std::vector<T> (for any T ) is not trivially copyable because its copy constructor is not trivial, if only because it's user-provided (as opposed to implicitly-defined).
Boost::noncopyable prevents the classes methods from accidentally using the private copy constructor.
The push_back method is used to append an element in a sequential STL container (e.g., std::vector). When inserted using the push_back, the new element is copy-or-move-constructed.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With