RAII is C++'s most important pattern: tie resource lifetimes to object lifetimes so cleanup happens automatically — even if exceptions are thrown:
class MutexGuard {
mutex& mtx;
public:
MutexGuard(mutex& m) : mtx(m) { mtx.lock(); }
~MutexGuard() { mtx.unlock(); }
// Non-copyable — unique ownership
MutexGuard(const MutexGuard&) = delete;
MutexGuard& operator=(const MutexGuard&) = delete;
};
mutex m;
void criticalSection() {
MutexGuard guard(m); // locks
// ... do work ...
} // guard's destructor unlocks, no matter what
unique_ptr / shared_ptr — memorylock_guard / unique_lock — mutex locksifstream / ofstream — file handlesImplement a Timer RAII class that records the start time in its constructor and provides getElapsedMs() returning elapsed milliseconds as long long.
Click "Run" to execute your code.