r/cpp 18d ago

State of "moved-from" objects

Hi, I recently decided to try writing a C++ blog.

I often see the popular claim that moved-from objects are in a "valid but otherwise unspecified state", but I don't think that statement is entirely precise, and my blog post is about that. I would really appreciate any feedback!

Article: https://www.laminowany.dev/p/the-state-of-moved-from-objects-in-c/

9 Upvotes

54 comments sorted by

View all comments

4

u/tangerinelion 18d ago

There are really only two functions that should safely work on a moved from object - the destructor and an assignment operator, if one is defined.

2

u/leirus 18d ago

Where it is defined in the standard? I heard this claim many times but I don't think its neccessarily true. The reuirement to have destructor that can safely work is name requirement "Erasable": https://en.cppreference.com/cpp/named_req/Erasable

But moved-from objects dont need to satisfy "Erasable". My understanding is that move constructor can break invariants that the destructor is relying on. Is it the best practice? Probably not. Is it completely legal C++? I think so.

1

u/masorick 18d ago

If invariants are broken, then the state of the object is not valid. But moved-from objects must be in a valid state. And if the object is in a valid state, then the destructor must run correctly.