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
。