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

做开发房地产网站可行吗株洲24小时新闻

做开发房地产网站可行吗,株洲24小时新闻,优秀设计案例,敬请期待英文翻译本文是对cprimer智能指针常用部分进行的大体总结,因为cprimer是个工具书,内容太详细,反而会造成初学者的厌烦,首先了解大体内容后再进行详细的学习会事半功倍,祝愿每个学c的都能造出自己的专属轮子,PEACE A…

本文是对c++primer智能指针常用部分进行的大体总结,因为c++primer是个工具书,内容太详细,反而会造成初学者的厌烦,首先了解大体内容后再进行详细的学习会事半功倍,祝愿每个学c++的都能造出自己的专属轮子,PEACE AND LOVE
c++中的内存可分为三种,静态内存,堆内存(自由空间),栈内存。
静态内存:用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量,由编译器自动创建核销毁,在使用前分配,在程序结束时销毁。
栈:保存函数内部的非static对象,由编译器自动创建核销毁,在其定义的程序块运行时存在。
堆:被称为动态分配,生存周期由程序控制,人为控制创建核销毁。

12.1动态内存与智能指针

new申请动态内存,delete释放动态内存,注意有new必须要有相应的delete删除内存,不然会产生内存泄漏问题。
为了解决这种内存泄漏问题,标准库包含两种智能指针,其可以自动释放内存。shared_ptr允许多个指针指向同一个对象,unique_ptr独占一个对象。定义在meory头文件中。

shared_ptr

定义shared_ptr,定义和其它的模板类似,需要使用<>,默认初始化时会产生空指针。

	shared_ptr<int>p1;      //p1为指针,指向string类型shared_ptr<vector<int>>p2;//p2为指针,指向int的vector

make_shared
最安全的分配和使用动态内存的方法是使用make_shared函数。该函数可以在动态内存分配一个对象并初始化它,返回一个shared_ptr指针。在memory中定义。

//p3是指向42的shared_ptr;
shared_ptr<int>p3=make_shared<int>(42);

数据类型嫌麻烦的话可以使用auto

auto p=make_shared<int>(42);

shared_ptr的拷贝和赋值

auto p=make_shared<int>(42);
auto q(p); //p和q指向同一个对象

每个shared_ptr都有一个关联的计数器,当拷贝时,其计数器会加1,当给shared_ptr赋予新值或被销毁时,计数器减一。当计数器变成0时,会释放管理的对象。

auto r=make_shared<int>(42);//r指向对象的计数器为1;
r=q;//r被赋值,原对象计数器减一,变成0,指向的对象42被释放,同时q对象的计数器加一。

当指向对象的最后一个shared_ptr被销毁时,其指向对象会自动销毁,使用的是析构函数。
注意下面的智能指针使用

void use_factory(T arg){auto p=make_shared<T>(arg);  //计数器加一return p;//返回使p指向的内存计数器加一}

这样在离开作用域时,p被销毁,但其指向的内存没有被释放,知道最后一个指向该内存的被销毁时,内存才会被释放。
使用了动态生存期的资源的类
大多数类分配资源和对应的对象生存周期一致,如每个vector有自己的元素。

vector<int>v1;
{vector<int>v2={1,2,3};v1=v2;
}//离开作用域后,v2被销毁,但是v1仍然有三个元素,其是v2元素的拷贝

v1,v2的地址如下,可见之后再进行操作时,不是同一块内存
在这里插入图片描述
如果想要在离开作用域后,v2对象仍然存在,且v1仍然管理v2的内存那么就需要shared_ptr,让其指向v2对象

auto v1=make_shared<vector<int>>();{auto v2 = make_shared < vector<int> > ();v1 = v2;v2->push_back(1);cout << v2->size()<< endl;cout << v1->size() << endl;}//即使离开了作用域,仍然可以通过v1对v2所指向的内存进行操作。

在这里插入图片描述
这样可以通过智能指针对v1和v2指向的相同对象进行操作,即使在作用域外,仍然可以使用v1对v2的内存进行处理。

直接管理内存

使用new动态分配
new无法为对象命名,而是返回一个指向该无名对象的指针。

int *pi=new int;//pi指向一个动态分配的,未初始化的无名对象。

可以对申请的动态内存进行初始化:

int *p=new int(4)//该无名对象的值为4

动态分配const对象

const int *p=new const int(1);//初始化为1,若未显式初始化,那么默认初始化

释放内存
注意每次使用new,在结束后都需要delete,否则会发生内存泄漏。

delete p;//p是指针,指向动态分配的内存,或者是空指针

在delete之后,指针值变成无效的,但指针变成了空悬指针,这时需要将nullptr赋予该指针,表明该指针不指向任何对象。
使用new分配动态内存有内存泄漏,空悬指针等问题,因此尽量使用智能指针。

shared_ptr和new结合使用

除了使用make_shared初始化智能指针外,可以使用new进行初始化。

shared_ptr<int>p1(new int(1024));//使用直接初始化方式
shared_ptr<int>p2=new int(1024);//错误,由于智能指针的构造函数是explicit的。

智能指针有一个get函数,可以得到shared_ptr指向对象的内置指针。

shared_ptr<int>p(new int(2));
int *q=p.get();//q为一个内置指针,指向和p同一个对象,注意不要delete q

其它操作

p.reset(new int(12));//p会指向一个新申请的动态内存,同时根据情况选择是否释放原内存。

unique_ptr

和shared_ptr不同,unique_ptr拥有它所有的唯一对象,这样就保证unique_ptr被销毁时,其对象也会被销毁。
只能使用new进行直接初始化,不支持普通拷贝和赋值。

unique_ptr<int>p1(new int(2));//直接初始化
unique<ptr<int>p2;
p2=p1;//错误,不能同时指向一个对象

但可以所有权转移,使用reset或release。

unique_ptr<int>p1(new int(2));
unique_ptr<int>p2(p1.release());//release会将p1置为空,就是切断p1和它对象的联系
unique_ptr<int>p3(new int(1));
p2.reset(p3.release());//将p3置空并转权给p2;

最后总结下,智能指针就是不用自己销毁的内置指针,这就避免了忘记delete造成的内存泄漏问题。在理解指针的前提下再进行智能指针的学习,可以很快掌握。

http://www.lbrq.cn/news/2632213.html

相关文章:

  • wordpress中调用分类目录文章列表seo优化排名
  • 摄影网站app外贸网站推广与优化
  • 政府网站集约化建设情况四种营销策略
  • 防伪网站怎么做爱站seo工具包下载
  • 适合国人的wordpress主题福州百度快照优化
  • 酒店网站的建设企业培训网
  • 商丘网站建设略奥网服装市场调研报告
  • 家用电脑做网站免费seo网站诊断免费
  • 南昌网站建设有限公司网站流量统计系统
  • 北京工商局网站如何做股东变更百度网站排名搜行者seo
  • 给网站做备案合肥网站推广优化公司
  • 泉州高端网站建设小程序开发一个多少钱啊
  • 东阳企业网站微商城建设搜索引擎优化seo优惠
  • wordpress全站301西安百度竞价外包
  • 网站备案的链接包括哪些内容
  • wordpress修改站名网络营销过程步骤
  • 这么建设新的网站百度浏览器下载安装2023版本
  • 房产信息网站模板磁力链 ciliba
  • 徐州人才网招聘信息网站优化靠谱seo
  • 丰台深圳网站建设公司石家庄头条今日头条新闻
  • 苏州专业做网站的公司百度网盘搜索引擎入口在哪里
  • 临沂城乡建设管理局网站企业自建网站
  • 国外一个做ppt的网站做seo推广公司
  • 自己做视频网站的流程sem投放
  • 网站如何做内链成都新闻最新消息
  • 鞍山做网站的百度收录软件
  • 连江县建设局网站烟台seo外包
  • 西宁网站制作费用是多少钱什么是新媒体营销
  • 二级网站建设方案模板搜索引擎优化自然排名
  • 做网站要的图片斗鱼知名的seo快速排名多少钱
  • MySQL definer does not exist 问题分析
  • Python day37
  • mapbox进阶,mapbox-gl-draw绘图插件扩展,绘制新增、编辑模式支持点、线、面的捕捉
  • Boosting 知识点整理:调参技巧、可解释性工具与实战案例
  • 软件定义汽车 --- 电子电气架构的驱动
  • 【数字图像处理系列笔记】Ch03:图像的变换