More C++ Idioms/Scope Guard

= Scope Guard =

Intent

 * To ensure that resources are always released in face of an exception but not while returning normally
 * To provide basic exception safety guarantee

Motivation
Resource Acquisition is Initialization (RAII) idiom allows us to acquire resources in the constructor and release them in the destructor when scope ends successfully or due to an exception. It will always release resources. This is not very flexible. Sometime we don't want to release resources if no exception is thrown but we do want to release them if an exception is thrown.

Solution and Sample Code
Enhance the typical implementation of the Resource Acquisition is Initialization (RAII) idiom with a conditional check.

Known Uses

 * boost::mutex::scoped_lock
 * boost::scoped_ptr
 * std::auto_ptr
 * ACE_Guard
 * ACE_Read_Guard
 * ACE_Write_Guard
 * ACE_Auto_Ptr
 * ACE_Auto_Array_Ptr

Related Idioms

 * Resource Acquisition Is Initialization (RAII)