RAII (Resource Acquisition Is Initialization): gắn vòng đời tài nguyên (bộ nhớ, file, lock...) vào vòng đời một object trên stack.
- Cấp tài nguyên trong constructor, giải phóng trong destructor.
- Khi object ra khỏi scope, destructor tự chạy — tài nguyên được trả lại kể cả khi có exception.
cpp
void bad() {
FILE* f = fopen("x.txt", "r");
do_work(); // throw exception → fclose không bao giờ chạy → leak
fclose(f);
}
void good() {
std::ifstream f("x.txt"); // constructor mở file
do_work(); // throw cũng được
} // destructor đóng file tự độngHình dung: thay vì nhớ "mở rồi phải đóng", ta giao việc đóng cho object tự dọn khi rời scope.
Đây là nền tảng của std::unique_ptr, std::lock_guard, std::fstream.