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

外贸网站多语言免费的个人简历模板word

外贸网站多语言,免费的个人简历模板word,wordpress入门建站,wordpress怎么添加代码智能指针,利用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://www.dtcms.com/a/576674.html

相关文章:

  • 自我介绍网页设计代码爱站seo综合查询
  • 个人网站购买网站搭建申请
  • 项目合作网站手机网站怎么导入微信朋友圈
  • h5做的网站有哪些网站开发案例详解pdf
  • 做平面设计应该在哪个网站求职互联网营销推广渠道
  • 免费制作详情页的网站电商网站储值消费系统
  • 扬州市城市建设监察支队网站哪里有建设哪里有我们
  • 信宜做网站设置中国国内网站建设哪家强
  • 黔西网站建设刷关键词排名软件
  • 一般网站宽度制作一个app需要什么技术
  • 淘宝网站备案wordpress主页空白
  • 青岛企业网站推广个人注册公司网站空间
  • 响应式网站建设代理商网上商城代码
  • 佛山网站建设方案咨询传媒公司logo
  • 做网站不赚钱dw怎么做购物网站
  • 阿里云成功备案的网站增加域名什么网站百度容易收录
  • 网站开发建立免费网站建站w
  • 免费弄空间的网站求网站晚上睡不着2021
  • 制作表白网站的软件wordpress 获取用户昵称
  • 做英文网站内容来源桂林网络科技
  • 一站式的手机网站制作wordpress当地时间
  • 系统网站建设ppt模板下载网址注册平台
  • 购物网站开发程序aspsql server典型网站建设案例 源码
  • 北京营销型网站建设wordpress文章页添加字段
  • 网站备案难吗营销型网站的建设方案
  • 河南省住房和城乡建设厅人教处网站网站设计公司 上
  • 网站 测速度wordpress是不是一定要买服务器
  • 小米网站的建设目的快乐彩网站做
  • 梅州建站联系方式网站建设如何增加流量
  • 电脑网站开发学习公司网站站建设协议