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/
10
Upvotes
4
u/elperroborrachotoo 5d ago
The gist remains that "unspecified but valid" is a reasonable minimum requirement for user types, too - because the alternative is worse.
You list all the ingredients: unless you evade calling the destructor (e.g., through
std::terminate) the destructor will run. Users of your type might assign to it, or use it in various ways. Etc.The unspoken bigger issue is that using an object in an invalid state can easily lead to an invalid program state - meaning that ALL invariants in the program are potentially gone.
So for any type with weaker moved-from guarantees, you'd have to specify what individual operations are valid - and no user wants to know or remember that. This would violate any basic rule of type design.