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

外贸机械网站国外网站排行

外贸机械网站,国外网站排行,免费建站哪家性价比高,kilu wordpress1.什么是 RAII 1.概念 Resource Acquisition Is Initialization 资源获取即初始化。一般分为 3 步#xff0c;当我们在main函数中声明一个局部对象的时候#xff0c;会自动调用构造函数进行对象的初始化#xff0c;当整个main函数执行完成后#xff0c;自动调用析构函数来…1.什么是 RAII 1.概念 Resource Acquisition Is Initialization 资源获取即初始化。一般分为 3 步当我们在main函数中声明一个局部对象的时候会自动调用构造函数进行对象的初始化当整个main函数执行完成后自动调用析构函数来销毁对象整个过程无需人工介入由操作系统自动完成 2.如何使用 raii 智能指针std::shared_ptr和std::unique_ptr即RAII最具代表的实现使用智能指针可以实现自动的内存管理再也不需要担心忘记delete造成的内存泄漏。 还有就是锁有可能出现初始化锁但是没有释放锁的情况 2.智能指针 智能指针源码实现 导入头文件 #include memory2.1 内存泄露 一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的大小任意的(内存块的大小可以在程序运行期决定)内存块使用完后必须显式释放的内存。应用程序般使用malloc,、realloc、 new等函数从堆中分配到块内存 避免内存泄露的几种方式 计数法使用new或者malloc时让该数1delete或free时该数-1程序执行完打印这个计数如果不为0则表示存在内存泄露一定要将基类的析构函数声明为虚函数 ~A() default;对象数组的释放一定要用delete []有new就有delete有malloc就有free保证它们一定成对出现 检测工具 Linux下可以使用Valgrind工具 https://blog.csdn.net/qq_20553613/article/details/106503929 会显示有几个指针是 free 的有几个指针是 alloc 的显示是在哪一行出错的同样 Valgrind 还能检测其他的内存问题 valgrind --toolmemcheck --leak-checkfull ./a使用空指针 使用野指针指向了一个根本不存在或者已经被释放的指针 内存空间访问越界 内存空间未释放 内存空间重复释放 内存空间申请和释放不匹配 Windows下可以使用CRT库 3.auto_ptr 定义auto_ptr的实现原理其实就是RAII在构造的时候获取资源在析构的时候释放资源并进行相关指针操作的重载 抛弃原因因为有拷贝构造和赋值的情况下原有的对象会被释放 https://blog.csdn.net/Dasis/article/details/121663794 (1)赋值 当我们对智能指针进行赋值时如 ptest2 ptestptest2会接管ptest原来的内存管理权ptest会变为空指针如果ptest2原来不为空则它会释放原来的资源 2数组传递值本质也是移动拷贝 void foo_ary() {std::vectorstd::auto_ptrint Ary;std::auto_ptrint p(new int(3));//push_back时不允许如此构造对象Ary.push_back(p);printf(%d\r\n, *p); }4.shared_ptr 多个 shared_ptr 智能指针可以共同使用同一块堆内存。并且由于该类型智能指针在实现上采用的是引用计数机制即便有一个 shared_ptr 指针放弃了堆内存的“使用权”引用计数减 1也不会影响其他指向同一堆内存的 shared_ptr 指针只有引用计数为 0 时堆内存才会被自动释放。 (1)创建 std::shared_ptrint p3(new int(10)); std::shared_ptrint p5 std::make_sharedint(10); //调用拷贝构造函数 std::shared_ptrint p4(p3);//或者 std::shared_ptrint p4 p3; //调用移动构造函数 std::shared_ptrint p5(std::move(p4)); //或者 std::shared_ptrint p5 std::move(p4);(2) 源码 // // Created by xuboluo on 2022/9/5. // shared_prt_demo#include iostream template typename T class my_shared{int count_;T* ptr_;public:// 创建构造函数// 1. 默认构造函数my_shared():count_(0),ptr_(nullptr){}// 2. 传入的是对象my_shared(T* ptr):ptr_(ptr),count_(1){}// 3.传入的是智能指针my_shared(const my_sharedT other):count_((other.count_1)),ptr_(other.ptr_){}// 析构函数~my_shared(){count_--;if(ptr_count_0){delete ptr_;}}// operator 的方法my_shared* operator(const my_sharedT other){if(thisother) return this;other.count_;// 将 prt2 指向的对象给 ptr1 并将自己原先的进行释放if(this-ptr_0--this-count_){delete ptr_;}// 释放完之后再向 ptr 赋值this-ptr_ other.ptr_;this-count_ other.count_;return this;}// use_countint use_count(){return count_;} }; int main(){int* p new int(3);my_sharedint ptr(new int(3)); // 传入一个对象的指针my_sharedint ptr2(ptr); // 传入一个智能指针my_sharedint ptr3 ptr2;std::coutptr3.use_count(); }3Shared_ptr 的循环引用 如果相互引用 shared_ptr 会造成程序死锁最终谁也不释放资源 Demo 5.weak_ptr 解决 shared_ptr 相互引⽤时两个指针的引⽤计数永远不会下降为0从⽽导致死锁问题。⽽ weak_ptr 是对对象的⼀种弱引⽤可以绑定到 shared_ptr 但不会增加对象的引⽤计数。 如何判断 weak_ptr 失效1.expired()检查被引用的对象是否已删除。2.lock()会返回shared指针判断该指针是否为空。3.use_count()也可以得到shared引用的个数但速度较慢 (1)创建 std::shared_ptrint sp (new int); std::weak_ptrint wp3 (sp);(2)如何使用 #include iostream #include memory using namespace std;int main() {std::shared_ptrint sp1(new int(10));std::shared_ptrint sp2(sp1);std::weak_ptrint wp(sp2);//输出和 wp 同指向的 shared_ptr 类型指针的数量cout wp.use_count() endl; // 2//释放 sp2sp2.reset();cout wp.use_count() endl; // 1 //借助 lock() 函数返回一个和 wp 同指向的 shared_ptr 类型指针获取其存储的数据cout *(wp.lock()) endl; // 10return 0; }6.unique_ptr 是作用域指针当超出作用域时就会被销毁然后调用 delete。同⼀时间只能有⼀个智能指针可以指向该对象每个 unique_ptr 指针指向的堆内存空间的引用计数都只能为 1一旦该 unique_ptr 指针放弃对所指堆内存空间的所有权则该空间会被立即释放回收而且 unique_ptr 的拷贝构造函数和 operator 都被 delete 了 (1)创建 std::unique_ptrint p4(new int); std::unique_ptrint p5(p4);//错误堆内存不共享 std::unique_ptrint p5(std::move(p4));//正确调用移动构造函数(2)如何使用 #include iostream #include memory using namespace std;int main() {std::unique_ptrint p5(new int);*p5 10;// p 接收 p5 释放的堆内存int * p p5.release();cout *p endl; // 10//判断 p5 是否为空指针if (p5) {cout p5 is not nullptr endl;}else {cout p5 is nullptr endl; // null }std::unique_ptrint p6;//p6 获取 p 的所有权p6.reset(p);cout *p6 endl; // 10return 0; }
http://www.zqtcl.cn/news/165601/

相关文章:

  • 网站建设费用标准做网站怎么盈利
  • 仕德伟做的网站图片怎么修initial wordpress
  • 网站制作公司多少费用正规的机械外包加工订单网
  • 网站的维护和推广2345网址大全设主页访问
  • 天津商城网站建设公司如何申请注册企业邮箱
  • 做家旅游的视频网站好给我一个可以在线观看的免费
  • 香奈儿网站建设做网站应该问客户什么需求
  • 永久免费ppt下载网站互联网上市公司一览表
  • 甘肃省建设工程168网站东营智能网站设计
  • 网站跨机房建设方案山西运城市建设局网站
  • 网站被k文章修改设计师图片素材
  • 建设银行益阳市分行桃江支行网站9377烈焰传奇手游官网
  • 网站收费怎么做沈阳建设工程信息网 等级中项网
  • 做网站后台教程视频杭州网站开发建设
  • 维度 网站建设优秀vi设计网站
  • 快速搭建网站工具海洋网络做网站不负责
  • 做电影资源网站服务器怎么选wordpress唱片公司模板
  • 医院网站建设投标要求wordpress文章的表是什么
  • 怎么做网站后门海外营销推广
  • 网站建设中英版网站要做手机版怎么做的
  • 安徽网站开发与维护专业阜阳建设部网站
  • 山东省住房和建设厅网站网站优化大计
  • 大良建网站织梦建设两个网站 视频
  • 用html5制作个人网站航空港建设局网站
  • 祥云平台建站网站备案通过什么可以备案
  • 免费建造网站系统php和wordpress
  • 九脉堂是做网站的网站权重不稳定
  • 网站怎么做来流量门户网站的发布特点
  • 网站设计相似侵权吗免费游戏网站建设
  • 湖北长安建设网站制作一个网站的步骤是什么