I’m learning C++ and I saw that the source-code for a scope lock is quite simple. . How does it work, and how is this an example of “Resource Acquisition is Instantiation” (RAII) ?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The idea of RAII (Resource Acquisition Is Initialisation) is that creating an object and initialising it are joined together into one unseparable action. This generally means they’re performed in the object’s constructor.
Scoped locks work by locking a mutex when they are constructed, and unlocking it when they are destructed. The C++ rules guarantee that when control flow leaves a scope (even via an exception), objects local to the scope being exited are destructed correctly. This means using a scoped lock instead of manually calling
lock()andunlock()makes it impossible to accidentally not unlock the mutex, e.g. when an exception is thrown in the middle of the code betweenlock()andunlock().This principle applies to all scenarios of acquiring resources which have to be released, not just to locking mutexes. It’s good practice to provide such “scope guard” classes for other operations with similar syntax.
For example, I recently worked on a data structure class which normally sends signals when it’s modified, but these have to be disabled for some bulk operations. Providing a scope guard class which disables them at construction and re-enables them at destruction prevents potential unbalanced calls to the disable/enable functions.