ScopeGuard basics

Let's start with the more difficult problem—how to implement a generic rollback class, a generic version of StorageGuard from the last section.  The only difference between that and the cleanup class is that the cleanup is always active, but the rollback is canceled after the action is committed. If we have the conditional rollback version, we can always take out the condition check, and we get the cleanup version, so let's not worry about that for now. 

In our example, the rollback is a call to the S.undo() method. To simplify the example, let's start with a rollback that calls a regular function, not a member function:

void undo(Storage& S) { S.undo(); }

Once the implementation is finished, the program should look something ...

Get Hands-On Design Patterns with C++ now with O’Reilly online learning.

O’Reilly members experience live online training, plus books, videos, and digital content from 200+ publishers.