C++ 智能指针简单介绍及用法
创始人
2024-11-13 22:10:50
0

C++ 智能指针简单介绍及用法

智能指针是 C++11 引入的一个非常实用的特性,旨在自动管理动态分配的内存,避免内存泄漏和悬空指针问题。主要有三种类型的智能指针:std::unique_ptrstd::shared_ptrstd::weak_ptr。下面是对它们的详细介绍:

1. std::unique_ptr

  • 特性

    • 独占所有权:每个 std::unique_ptr 实例只能拥有一个对象的唯一所有权。
    • 不可复制:不能复制 unique_ptr,但可以移动(使用移动构造函数或移动赋值运算符)。
  • 使用场景:适用于表示唯一的拥有关系,不需要共享所有权的情况。

  • 示例

    #include  #include   void uniquePtrExample() {     std::unique_ptr ptr1(new int(10)); // 创建 unique_ptr     std::cout << *ptr1 << std::endl;         // 使用指针     std::unique_ptr ptr2 = std::move(ptr1); // 转移所有权     // std::cout << *ptr1; // 错误:ptr1 已经不再拥有对象 } 

2. std::shared_ptr

  • 特性

    • 共享所有权:多个 std::shared_ptr 实例可以指向同一个对象。
    • 引用计数:通过引用计数来管理对象的生命周期,当最后一个 shared_ptr 被销毁时,内存会自动释放。
  • 使用场景:适用于多个对象共享同一资源的情况。

  • 示例

    #include  #include   void sharedPtrExample() {     std::shared_ptr ptr1(new int(20)); // 创建 shared_ptr     {         std::shared_ptr ptr2 = ptr1; // ptr2 也指向同一个对象         std::cout << *ptr2 << std::endl;   // 输出 20     } // ptr2 离开作用域后,引用计数减少     std::cout << *ptr1 << std::endl;     // 仍然有效输出 20 } 

3. std::weak_ptr

  • 特性

    • 弱引用:提供对 shared_ptr 指向对象的非拥有性引用。
    • 不增加引用计数:不会影响对象的生命周期。
  • 使用场景:用于防止循环引用,或者在需要检查资源是否仍然有效时。

  • 示例

    #include  #include   void weakPtrExample() {     std::shared_ptr sptr(new int(30));     std::weak_ptr wptr = sptr; // 创建 weak_ptr          if (auto sptr2 = wptr.lock()) { // 检查 weak_ptr 是否有效         std::cout << *sptr2 << std::endl; // 输出 30     }     sptr.reset(); // 删除 sptr 指向的对象     if (auto sptr2 = wptr.lock()) {         std::cout << *sptr2 << std::endl; // 输出为空,指向的对象已被释放     } else {         std::cout << "资源已被释放" << std::endl;     } } 

总结

利用智能指针可以帮助我们有效管理内存,降低内存泄漏的风险,提高程序的安全性和稳定性。🎉 选择合适的智能指针类型可以使代码更简洁和易于维护。

相关内容

热门资讯

七分钟后台!(约局吧)确实是有... 相信很多朋友都在电脑上玩过约局吧吧,但是很多朋友都在抱怨用电脑玩起来不方便。为此小编给大家带来了约局...
8分钟系统!(Pkerist)... 您好,Pkerist这款游戏可以开挂的,确实是有挂的,需要了解加微【439369440】很多玩家在这...
3分钟分钟!欢汇娱乐其实是有挂... 3分钟分钟!欢汇娱乐其实是有挂的,欢汇娱乐2021已更新详细教程(2021已更新)(哔哩哔哩);是一...
9分钟大厅房!(Wepoke安... 9分钟大厅房!(Wepoke安装)其实真实是有挂的,Wepoke安装确实是真的有挂吗,详细教程(有挂...
4分钟私人局!红龙扑克发牌有问... 4分钟私人局!红龙扑克发牌有问题,德州版Wepoke原来一直都是有挂,详细教程(2021已更新)(哔...
5分钟教学!(Wepoke稳定... 5分钟教学!(Wepoke稳定)原来有挂猫腻,Wepoke稳定软件透明挂,详细教程(有挂方略)-哔哩...
2分钟分钟!好友跑得快真的是有... 2分钟分钟!好友跑得快真的是有挂吗,好友跑得快2024已更新详细教程(2024已更新)(哔哩哔哩);...
四分钟最新版!(德州wpk)是... 四分钟最新版!(德州wpk)是有挂的吗,德州wpk详细教程(有挂技巧)-哔哩哔哩是一款可以让一直输的...
9分钟分钟!wePOke真的是... 9分钟分钟!wePOke真的是有挂吗,开开互动其实是真的有挂的,详细教程(2025已更新)(哔哩哔哩...
五分钟分钟!Ruuner其实确... 五分钟分钟!Ruuner其实确实存在有挂的,新棋联盟真实是有挂辅助挂吗,详细教程(2022已更新)(...