Smart Pointer – Cứu tinh quản lý bộ nhớ trong C++

147 views 23:16 0 Comments 05/08/2025

🔍 Vấn đề: new/delete và những cái bẫy trí nhớ

Trong C++, nếu bạn dùng new để cấp phát bộ nhớ mà quên delete, bạn đã tạo ra memory leak – vùng nhớ không được giải phóng.

void foo() {
    int* ptr = new int(10);
    // làm gì đó với ptr
    // quên delete ptr => leak
}

Vấn đề càng nghiêm trọng khi có nhiều lối thoát hàm, xử lý lỗi, hay thậm chí throw.

🧪 Giải pháp hiện đại: Smart Pointer

Từ C++11 trở đi, bạn không cần phải tự tay delete nữa. Hãy để smart pointer làm điều đó!

#include <memory>

void foo() {
    std::unique_ptr<int> ptr = std::make_unique<int>(10);
    // Không cần delete – tự động xoá khi ra khỏi scope
}

Các loại smart pointer phổ biến:

LoạiMô tả ngắn
unique_ptrSở hữu độc quyền, không copy được
shared_ptrDùng chung, đếm số lượng tham chiếu
weak_ptrTránh vòng tham chiếu với shared_ptr

⚙️ Khi nào dùng loại nào?

  • unique_ptr: mặc định nên dùng nếu bạn không chia sẻ ownership.
  • shared_ptr: dùng khi nhiều phần cùng cần quản lý cùng 1 tài nguyên.
  • weak_ptr: đi chung với shared_ptr để tránh vòng lặp.

Ví dụ với shared_ptr:

#include <memory>
#include <iostream>

void foo() {
    std::shared_ptr<int> a = std::make_shared<int>(5);
    std::shared_ptr<int> b = a; // b và a cùng quản lý 1 vùng nhớ
    std::cout << *b << "\n";
}

🎯 Vì sao smart pointer là “chuẩn” C++ hiện đại?

  • An toàn hơn new/delete
  • Tự động giải phóng tài nguyên
  • Dễ maintain, ít bug về memory
  • Dễ phối hợp với các container như std::vector, std::map

📌 Gợi ý cho bạn

Nếu bạn từng:

  • Vướng lỗi memory leak
  • Quên delete
  • Dùng try-catch và crash vì quên dọn bộ nhớ

Thì hãy bắt đầu dùng smart pointer từ hôm nay!

📌 Gợi ý đọc thêm:

Thẻ: , ,

One thought on “Smart Pointer – Cứu tinh quản lý bộ nhớ trong C++”

Leave a Reply

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *