Why does C++’s vector class call copy constructors? Why doesn’t it just memcpy the underlying data? Wouldn’t that be a lot faster, and remove half of the need for move semantics?
I can’t imagine a use case where this would be worse, but then again, maybe it’s just because I’m being quite unimaginative.
Because the object needs to be notified that it is being moved. For example, there could be pointers to that given object that need to be fixed because the object is being copied. Or the reference count on a reference counted smart pointer might need to be updated. Or….
If you just memcpy’d the underlying memory, then you’d end up calling the destructor twice on the same object, which is also bad. What if the destructor controls something like an OS file handle?
EDIT: To sum up the above:
The copy constructor and destructor can have side effects. Those side effects need to be preserved.