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

大连做网站比较好的网站制作需要的软件

大连做网站比较好的,网站制作需要的软件,郑州app外包公司,深圳市建设工程交易服务网中心智能指针,利用class类对象销毁的时候自动调用析构函数,去把delete ptr的操作放在析构函数里,去实现自动释放指针里的资源 RAII是ResourceAcquisition Is Initialization的缩写,他是⼀种管理资源的类的设计思想,本质是 …

智能指针,利用class类对象销毁的时候自动调用析构函数,去把delete ptr的操作放在析构函数里,去实现自动释放指针里的资源


RAII是ResourceAcquisition Is Initialization的缩写,他是⼀种管理资源的类的设计思想,本质是 ⼀种利⽤对象⽣命周期来管理获取到的动态资源,避免资源泄漏,这⾥的资源可以是内存、⽂件指 针、⽹络连接、互斥锁等等。RAII在获取资源时把资源委托给⼀个对象,接着控制对资源的访问, 资源在对象的⽣命周期内始终保持有效,最后在对象析构的时候释放资源,这样保障了资源的正常 释放,避免资源泄漏问题。

智能指针类除了满⾜RAII的设计思路,还要⽅便资源的访问,所以智能指针类还会想迭代器类⼀ 样,重载 operator*/operator->/operator[] 等运算符,⽅便访问资源。


unique_ptr //唯一指针

只有移动,没有拷贝,

shared_ptr //共享指针,引用计数的指针

有移动,有拷贝,引用计数来判断是否对所管理的资源进行delete

weak_ptr //弱指针,解决循环引用内存泄漏问题,配合shared_ptr使用

delete ptr /delete[] ptr; shared和unique的删除器

unique_ptr和shared_ptr都有

unique_ptr<Date[]> up1(new Date[5]);

shared_ptr<Date[]> sp1(new Date[5]);

的用法,

此外,shared的删除器是通过构造函数的第二个参数传入,而unique还要传入模板参数的第二个类型,

struct Date
{int _year;int _month;int _day;Date(int year = 1, int month = 1, int day = 1):_year(year), _month(month), _day(day){}~Date(){cout << "~Date()" << endl;}};
template<class T>
void DeleteArrayFunc(T* ptr)
{delete[] ptr;
}
template<class T>
class DeleteArray
{
public:void operator()(T* ptr){delete[] ptr;}
};
class Fclose
{
public:void operator()(FILE* ptr){cout << "fclose:" << ptr << endl;fclose(ptr);}
};
int main()
{//这样实现程序会崩溃// unique_ptr<Date> up1(new Date[10]);// shared_ptr<Date> sp1(new Date[10]);// 解决⽅案1// 因为new[]经常使⽤,所以unique_ptr和shared_ptr// 实现了⼀个特化版本,这个特化版本析构时⽤的delete[]unique_ptr<Date[]> up1(new Date[5]);shared_ptr<Date[]> sp1(new Date[5]);// 解决⽅案2// 仿函数对象做删除器//unique_ptr<Date, DeleteArray<Date>> up2(new Date[5], DeleteArray<Date>());// unique_ptr和shared_ptr⽀持删除器的⽅式有所不同// unique_ptr是在类模板参数⽀持的,shared_ptr是构造函数参数⽀持的// 这⾥没有使⽤相同的⽅式还是挺坑的// 使⽤仿函数unique_ptr可以不在构造函数传递,因为仿函数类型构造的对象直接就可以调⽤// 但是下⾯的函数指针和lambda的类型不可以unique_ptr<Date, DeleteArray<Date>> up2(new Date[5]);shared_ptr<Date> sp2(new Date[5], DeleteArray<Date>());// 函数指针做删除器unique_ptr<Date, void(*)(Date*)> up3(new Date[5], DeleteArrayFunc<Date>);shared_ptr<Date> sp3(new Date[5], DeleteArrayFunc<Date>);// lambda表达式做删除器auto delArrOBJ = [](Date* ptr) {delete[] ptr; };unique_ptr<Date, decltype(delArrOBJ)> up4(new Date[5], delArrOBJ);shared_ptr<Date> sp4(new Date[5], delArrOBJ);// 实现其他资源管理的删除器shared_ptr<FILE> sp5(fopen("Test.cpp", "r"), Fclose());shared_ptr<FILE> sp6(fopen("Test.cpp", "r"), [](FILE* ptr) {cout << "fclose:" << ptr << endl;fclose(ptr);});return 0;
}

shared_ptr的循环引用缺陷

经典例子,你保我,我保你

#include <iostream>
#include <memory>class Node {
public:std::shared_ptr<Node> prev;  // 指向前一个节点std::shared_ptr<Node> next;  // 指向后一个节点~Node() {std::cout << "Node destroyed" << std::endl;}
};int main() {// 创建两个节点,形成循环引用auto node1 = std::make_shared<Node>();auto node2 = std::make_shared<Node>();node1->next = node2;  // node1 引用 node2node2->prev = node1;  // node2 引用 node1// main函数结束时...// node1 和 node2 的引用计数都为2(自身+对方)// 因此它们的析构函数不会被调用,导致内存泄漏return 0;
}

文章转载自:

http://bpETgkxY.nrnLk.cn
http://LyYu4J9j.nrnLk.cn
http://fS2VPmbZ.nrnLk.cn
http://5mhMf0qS.nrnLk.cn
http://9J8liwBi.nrnLk.cn
http://ZiYbooNp.nrnLk.cn
http://uj43nXlJ.nrnLk.cn
http://7qsSE2lV.nrnLk.cn
http://btFvKn1B.nrnLk.cn
http://mEwukOM2.nrnLk.cn
http://1vDGvMaU.nrnLk.cn
http://cMWCeXdN.nrnLk.cn
http://NhxDotBZ.nrnLk.cn
http://Dt2MQ9yd.nrnLk.cn
http://DClcIcjs.nrnLk.cn
http://Vvg6oaCN.nrnLk.cn
http://yo00xY3l.nrnLk.cn
http://gbMnTrmn.nrnLk.cn
http://5lOwseV7.nrnLk.cn
http://SBRsRXdG.nrnLk.cn
http://lUY8hPAC.nrnLk.cn
http://uvfpezai.nrnLk.cn
http://BY4EToaC.nrnLk.cn
http://6kp3kN3v.nrnLk.cn
http://6AXgML6F.nrnLk.cn
http://5zjCPYLx.nrnLk.cn
http://zbFlrpsv.nrnLk.cn
http://4vep4W5i.nrnLk.cn
http://5HavSVWQ.nrnLk.cn
http://koiCg2md.nrnLk.cn
http://www.dtcms.com/wzjs/630287.html

相关文章:

  • 建筑官方网站网络推广网络营销外包
  • 景观毕业设计作品网站数据网站建设多少钱
  • 网站维护一年多少费wordpress国内怎么上
  • 门户网站建设关系到什么都不会怎么做网站
  • 高青外贸公司网站建设产品宣传型企业网站怎么建设
  • 做网站有自己的服务器吗中学网站建设方案 分校区
  • 个人网站可以做哪些内容珠海华兴建设工程有限公司网站
  • 烟台开发区网站制作公司单纯做网站的公司
  • 电子商务网站设计代做移动网站如何做权重
  • 网站开发案例腾讯云可以做网站吗
  • 网站建设发展方向及前景展望wordpress 添加角色
  • 面签拍照 网站备案sem是什么意思呢
  • 德清网站建设企业老板培训课程
  • 网站建设属于什么工作asp net网站开发语言的特点
  • 建设一个网站需要哪些知识网站建设广告宣传
  • 企业网站设计方式wordpress 视频
  • 网站开发工程师是什么aspcms手机网站怎么做
  • 网站建设业务提成网站访问频率
  • 怎么注册免费个人网站小学培训机构
  • 做网站用什么网最好个人做啥网站流量大
  • qq网站登录入口部署iis网站
  • 创业公司做网站网站建设报价方案下载
  • 网站如何实现微网站设计任务
  • 福建省建设资格注册中心网站佛山网站建设推广订做
  • 公司门户网站全网推广平台有哪些
  • 怎样在织梦网站建设目录天津做网站外包公司
  • 做仿牌网站树状结构的网站
  • 润东电子科技 网站建设重庆网站制作托管
  • 成功案例 品牌网站市场营销专业网站
  • 马鞍山网站建设与制作高端网站建设费用预算