C++智能指針支持以下幾種類型:
std::unique_ptr
:獨(dú)占地?fù)碛斜恢赶虻膶ο?,保證同一時間只有一個智能指針可以擁有某個對象的所有權(quán)。當(dāng)unique_ptr
超出作用域時,它會自動刪除所擁有的對象。std::unique_ptr<int> p(new int(42));
std::shared_ptr
:允許多個智能指針共享同一個對象的所有權(quán)。當(dāng)最后一個指向?qū)ο蟮?code>shared_ptr被銷毀或超出作用域時,它會自動刪除所擁有的對象。std::shared_ptr<int> p1(new int(42));
std::shared_ptr<int> p2 = p1; // p1 和 p2 現(xiàn)在共享同一個對象的所有權(quán)
std::weak_ptr
:是一種不擁有對象所有權(quán)的智能指針,它通過觀察shared_ptr
來訪問對象。weak_ptr
可以防止循環(huán)引用導(dǎo)致的內(nèi)存泄漏。std::shared_ptr<int> p1(new int(42));
std::weak_ptr<int> wk = p1; // 創(chuàng)建一個 weak_ptr,它觀察 p1
std::auto_ptr
:是C++98中引入的一種智能指針,用于自動管理動態(tài)分配的內(nèi)存。但在C++11中已被廢棄,并在C++17中被移除,因?yàn)樗嬖谒袡?quán)傳遞的問題。不建議使用auto_ptr
,而應(yīng)該使用unique_ptr
或shared_ptr
。