January 2020
Intermediate to advanced
454 pages
11h 25m
English
As stated before, a move should not throw an exception to ensure strong exception guarantees (that is, the act of moving an object doesn't possibly corrupt the object), and in most cases, this is possible because a move (unlike a copy) doesn't create resources, it transfers them. The best way to ensure that your move constructors and move assignment operators do not throw is to only transfer member variables using std::move(), as in the following example:
m_answer = std::move(other.m_answer);
Assuming that the member variable you are moving doesn't throw, your class will not either. Using this simple technique will ensure that your move constructors and operators never throw. But what if this operation cannot be used? Let's ...