C++智能指針支持以下幾種類型:
std::unique_ptr
:獨占地擁有被指向的對象,保證同一時間只有一個智能指針可以擁有某個對象的所有權。當unique_ptr
超出作用域時,它會自動刪除所擁有的對象。std::unique_ptr<int> p(new int(42));
std::shared_ptr
:允許多個智能指針共享同一個對象的所有權。當最后一個指向對象的shared_ptr
被銷毀或超出作用域時,它會自動刪除所擁有的對象。std::shared_ptr<int> p1(new int(42));
std::shared_ptr<int> p2 = p1; // p1 和 p2 現在共享同一個對象的所有權
std::weak_ptr
:是一種不擁有對象所有權的智能指針,它通過觀察shared_ptr
來訪問對象。weak_ptr
可以防止循環引用導致的內存泄漏。std::shared_ptr<int> p1(new int(42));
std::weak_ptr<int> wk = p1; // 創建一個 weak_ptr,它觀察 p1
std::auto_ptr
:是C++98中引入的一種智能指針,用于自動管理動態分配的內存。但在C++11中已被廢棄,并在C++17中被移除,因為它存在所有權傳遞的問題。不建議使用auto_ptr
,而應該使用unique_ptr
或shared_ptr
。