当前位置: 首页 > wzjs >正文

手机有软件做ppt下载网站有哪些内容百度搜索的优势

手机有软件做ppt下载网站有哪些内容,百度搜索的优势,德州网络推广,上海网站建设系文章目录 前言一、什么是 shared_ptr?二、创建share_ptr三、使用share_ptr1.输出结果2.结果分析 四、工作原理五、注意事项六、使用场景总结 前言 提示:这里可以添加本文要记录的大概内容: 在 C 的开发中,手动管理内存一直是一项…

文章目录

  • 前言
  • 一、什么是 shared_ptr?
  • 二、创建share_ptr
  • 三、使用share_ptr
    • 1.输出结果
    • 2.结果分析
  • 四、工作原理
  • 五、注意事项
  • 六、使用场景
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

在 C++ 的开发中,手动管理内存一直是一项易出错的工作。如果你曾因为 new 后忘记 delete 而引发内存泄漏,那你一定会对 C++11 引入的智能指针感激涕零。

今天,我们来聊聊智能指针家族中的“共享型成员”——std::shared_ptr


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是 shared_ptr?

shared_ptr 是 C++11 标准库提供的智能指针之一,它通过引用计数的方式,来自动管理动态分配的内存资源。当最后一个指向对象的 shared_ptr 被销毁时,对象也会被自动释放

简而言之:你不用再手动 delete 了,shared_ptr 会替你做!

🧠先理解“引用计数
shared_ptr 背后有个“引用计数器”,记录有多少个 shared_ptr 实例在使用这个对象。

每增加一个 shared_ptr 拷贝,计数 +1;

每销毁一个 shared_ptr,计数 -1;

当计数为 0,就自动 delete 对象

二、创建share_ptr

std::shared_ptr<Myclass>ptr1 = std::make_shared<Myclass>()

我们通常用make_share的方式来创建
<>中是指针的类型
右侧()中填参数,这里定义的类Myclass是一个无参,所以我们无参构造就行

三、使用share_ptr

#include<iostream>
#include<memory>class Myclass
{
public:Myclass(){std::cout << "调用构造函数" << std::endl;}~Myclass(){std::cout << "调用析构函数" << std::endl;}void Say(){std::cout << "Hello World" << std::endl;}
};int main()
{std::shared_ptr<Myclass>ptr1 = std::make_shared<Myclass>();{std::shared_ptr<Myclass>ptr2 = ptr1;ptr2->Say();std::cout << "引用计数:" << ptr2.use_count() << std::endl;}std::cout << "引用计数:" << ptr1.use_count() << std::endl;return 0;
}

1.输出结果

在这里插入图片描述

2.结果分析

首先我们
std::shared_ptrptr1 = std::make_shared();
会调用构造函数,此时ptr1指针指向的是一个堆上创建的 MyClass 对象
然后我们在局部函数中又加入了一个指针ptr2 也是指向ptr1所指向的对象,此时就不会再调用构造函数,而且此时引用计数是2,因为有两个指针都指向这个堆上创建的Myclass对象
在局部函数中{},结束后ptr2自动销毁,但不会调用析构函数,因为ptr2销毁了,引用计数-1,还剩下一个,当ptr1销毁后,引用计数为0,此对象才会自动销毁

四、工作原理

shared_ptr 的底层通过一个“控制块”(control block)来记录引用计数。每当有一个新的 shared_ptr 拷贝或赋值同一块资源,引用计数就会加一;当某个 shared_ptr 销毁时,引用计数减一;当计数归零,资源自动释放

这就像几个人(指针)共同拥有一把钥匙(资源),最后一个人离开时,把钥匙扔掉,锁也解除了

五、注意事项

禁止多个指针管理同一块内存!

MyClass* p = new MyClass();
std::shared_ptr<MyClass> sp1(p);
std::shared_ptr<MyClass> sp2(p); // ❌ 这两行一定不能这样!

用两个 shared_ptr 分别托管了同一块内存

✅ 正确做法只有一种:
让多个 shared_ptr 共享一个控制块,这就要从同一个 shared_ptr 拷贝出来

auto sp1 = std::make_shared<MyClass>();
auto sp2 = sp1; // ✅ 正确,共享控制块,引用计数 +1

六、使用场景

1.多个对象或线程共享同一个资源。

2.比如图形资源管理、网络连接池等场景中,shared_ptr 都能避免复杂的手动内存管理

总结

C++ 是一门强大但复杂的语言,合理使用智能指针可以极大降低内存泄漏和程序崩溃的风险。如果你还在用原始指针管理内存,是时候拥抱智能指针了!

http://www.dtcms.com/wzjs/384738.html

相关文章:

  • 免费建立自己的网站代理刷神马关键字排名软件
  • wordpress虎嗅网主题通州优化公司
  • 做标记网站常用网站推广方法及资源
  • 关于建设网站业务系统的请示网页制作网站
  • wordpress换域名不能访问湖南关键词优化品牌价格
  • 新疆建设职业学院网站6最新推广注册app拿佣金
  • 网站面包屑导航怎么做的腾讯广告联盟官网
  • 做动物网站的原因是想要导航页面推广app
  • 深圳建设工程交易保定seo网络推广
  • 佛山外贸网站建设价位网络营销策略案例分析
  • 网站目前如何做外链链接式友谊
  • wordpress 整合铁岭网站seo
  • 虎门网站建设公司百度关键词优化词精灵
  • 想自己做个公司网站不知道怎么做我是做推广的怎么找客户
  • 北京信息维护公司简单的seo
  • 电商平台系统seo公司 彼亿营销
  • 沈阳男科医院在哪里seo效果检测步骤
  • 12306网站做的好丑提高工作效率的方法有哪些
  • 广州微网站建设案例快刷网站
  • 毕业设计做音乐网站网站建设流程是什么
  • 免费php企业网站管理系统北京昨天出啥大事了
  • 2021年php凉透了seo推广任务小结
  • 本标准在住房城乡建设部门户网站免费推广软件工具
  • 查网站是不是用shopify做的免费行情软件网站下载大全
  • .netcms网站管理系统免费换友情链接
  • 武汉汉口做网站公司新站seo优化快速上排名
  • 做网站哪里找程序员阿里云盘资源搜索引擎
  • 福州网站优化整合网络营销外包
  • 网站制作知名公司企查查在线查询
  • wordpress安装ssl后网站404地产渠道12种拓客方式