温馨提示×

C++智能指针支持哪些类型

c++
小樊
82
2024-11-08 21:30:22
栏目: 编程语言

C++智能指针支持以下几种类型:

  1. std::unique_ptr:独占地拥有被指向的对象,保证同一时间只有一个智能指针可以拥有某个对象的所有权。当unique_ptr超出作用域时,它会自动删除所拥有的对象。
std::unique_ptr<int> p(new int(42));
  1. std::shared_ptr:允许多个智能指针共享同一个对象的所有权。当最后一个指向对象的shared_ptr被销毁或超出作用域时,它会自动删除所拥有的对象。
std::shared_ptr<int> p1(new int(42));
std::shared_ptr<int> p2 = p1; // p1 和 p2 现在共享同一个对象的所有权
  1. std::weak_ptr:是一种不拥有对象所有权的智能指针,它通过观察shared_ptr来访问对象。weak_ptr可以防止循环引用导致的内存泄漏。
std::shared_ptr<int> p1(new int(42));
std::weak_ptr<int> wk = p1; // 创建一个 weak_ptr,它观察 p1
  1. std::auto_ptr:是C++98中引入的一种智能指针,用于自动管理动态分配的内存。但在C++11中已被废弃,并在C++17中被移除,因为它存在所有权传递的问题。不建议使用auto_ptr,而应该使用unique_ptrshared_ptr

0