unique_ptr: sở hữu độc quyền — chỉ có 1 owner, không copy được, chỉ move. Khi ra scope, tự delete.
shared_ptr: sở hữu chia sẻ — nhiều pointer cùng quản lý 1 object qua reference count. Khi count về 0 thì object bị xóa.
weak_ptr: quan sát, không tăng ref count — dùng để phá vòng tròn tham chiếu (circular reference).
cpp
auto u = std::make_unique<int>(10);
auto u2 = std::move(u); // ownership chuyển sang u2; u = null
auto s1 = std::make_shared<int>(20);
auto s2 = s1; // ref count = 2
std::weak_ptr<int> w = s1; // ref count vẫn = 2
if (auto sp = w.lock()) { // kiểm tra còn tồn tại
std::cout << *sp;
}Hình dung: unique_ptr = chìa khoá nhà duy nhất; shared_ptr = nhiều bản sao chìa; weak_ptr = biết nhà ở đó nhưng không giữ chìa.