C++11中引入了哪些新的智能指针类型?请描述它们的用法和区别。

C++11中引入了三种新的智能指针类型:std::unique_ptr, std::shared_ptr, 和 std::weak_ptr

  1. std::unique_ptr:
  • 用法: std::unique_ptr 是一种独占所有权的智能指针,即同一时间内只能有一个 std::unique_ptr 指向一个给定的对象。当 std::unique_ptr 被销毁时,它所指向的对象也会被自动删除。

  • 例子:

    “`cpp
    std::unique_ptr<int> ptr(new int(10));
    “`

  1. std::shared_ptr:
  • 用法: std::shared_ptr 是一种共享所有权的智能指针,即多个 std::shared_ptr 可以同时指向同一个对象。对象的最后一个 std::shared_ptr 被销毁时,该对象才会被删除。

  • 例子:

    “`cpp
    std::shared_ptr<int> ptr1(new int(20));
    std::shared_ptr<int> ptr2 = ptr1; // 现在两个shared_ptr共享同一个对象
    “`

  1. std::weak_ptr:
  • 用法: std::weak_ptr 是一种不控制对象生命周期的智能指针,它是为了解决 std::shared_ptr 相互引用导致的循环引用问题而设计的。std::weak_ptr 需要与 std::shared_ptr 一起使用,它可以从一个 std::shared_ptr 或另一个 std::weak_ptr 创建,但它不会增加引用计数。

  • 例子:

    “`cpp
    std::shared_ptr<int> sharedPtr(new int(30));
    std::weak_ptr<int> weakPtr(sharedPtr);
    “`

区别:

  • std::unique_ptr 用于独占所有权的场景,只能有一个指针指向对象,适用于资源管理。
  • std::shared_ptr 用于共享所有权的场景,可以有多个指针指向同一个对象,适用于多个对象需要访问同一资源的情况。
  • std::weak_ptr 用于辅助 std::shared_ptr,解决循环引用问题,不控制对象的生命周期。

发表评论

后才能评论