SR is acting as a captured-variable-restorer. When it goes out of scope it restores some value that it previously captured.
The constructor will do two things: capture a reference, and capture the value of that reference. The destructor will restore the original value to that reference.
class SR
{
public:
SR(int& var) : capture(var), value(var) {}
~SR() { capture = value; }
private:
int& capture;
int value;
};
Edit: Just a guess, but I assume SR is supposed to stand for ScopeRestorer?