RAII (Resource Acquisition Is Initialization) — resource management via object lifetime.
Principle:
Example — File handling:
1#include <fstream>2#include <string>34class FileHandler {5private:6 std::ifstream file;78public:9 FileHandler(const std::string& path) {10 file.open(path); // Acquire11 if (!file.is_open()) {12 throw std::runtime_error("Cannot open file");13 }14 }1516 ~FileHandler() {17 if (file.is_open()) {18 file.close(); // Release19 }20 }2122 std::string readLine() {23 std::string line;24 std::getline(file, line);25 return line;26 }27};2829void func() {30 FileHandler file("data.txt");31 // File automatically closes when file goes out of scope32 std::string line = file.readLine();33}
Example — Mutex lock:
1#include <mutex>23class Lock {4private:5 std::mutex& mtx;67public:8 Lock(std::mutex& m) : mtx(m) {9 mtx.lock(); // Acquire10 }1112 ~Lock() {13 mtx.unlock(); // Release14 }15};1617std::mutex mtx;18{19 Lock lock(mtx);20 // Critical section21} // Automatically unlocked!
std::unique_ptr, std::shared_ptr — RAII for pointers.