博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ 动态内存与智能指针
阅读量:6161 次
发布时间:2019-06-21

本文共 973 字,大约阅读时间需要 3 分钟。

定位new

向new传递额外的参数。

例如:

1 int *p1 = new int; //如果分配失败,则new抛出std::bad_alloc2 int *p2 = new (nothrow) int;//如果分配失败则new返回空指针,不抛出异常

 

如果我们像下面这样调用process,会发生什么?

void process(shared_ptr
ptr){ //使用ptr }//ptr离开作用域,被销毁 process(shared_ptr
(p.get()));

p.get()返回一个内置指针,指向p所指向的对象,并利用其创建一个新的shared_ptr,因此不会与p动态共享内存,两者的计数器均为1,因此当离开作用域后ptr被销毁,而p成为一个管理悬空内存的shared_ptr

 

 

 

p和sp的定义如下,对于接下来的对process的每个调用,如果合法,解释它做了什么,如果不合法,解释错误原因。 

auto p = new int();auto sp = make_shared
();

(a) process(sp);

(b) process(new int());

(c) process(p);

(d) process(shared_ptr (p)); 

 

(a)合法,sp是一个共享指针,调用process时将sp传递给ptr,两者指向相同的对象,引用计数器为2,结束process后,ptr被销毁,引用计数器为1。

(b)不合法,不能讲内置指针隐式转换为shared_ptr   接受指针参数的智能指针构造函数是explicit的

(c)不合法,不能讲内置指针隐式转换为shared_ptr

(d)合法,但不建议使用,不应该混用智能指针和普通指针  当process结束后,p指向的内存会被释放,而p成为空悬指针

 

 

为什么shared_ptr没有release成员?

   因为release的作用是交出指针所指向对象的控制权,而即使shared_ptr不交出控制权,其他的shared_ptr依然可以控制此对象

转载于:https://www.cnblogs.com/blzm742624643/p/9688240.html

你可能感兴趣的文章
DNS
查看>>
设置Exchange 通讯组接收外部组织邮件
查看>>
xml中出现“文档中根元素后面的标记必须格式正确” 的错误
查看>>
linux基本命令之chattr与lsattr
查看>>
EnterpriseDB Replication,复制Oracle数据测试(1)
查看>>
shell替换某个目录下某个文件类型里的内容
查看>>
OpenStack Orchestration service (编排服务Heat)
查看>>
LVS-DR配置
查看>>
2.4 慢操作日志
查看>>
iptables 防火墙为什么不占用端口?
查看>>
Linux监控平台(zabbix监控介绍,安装zabbix,解决忘记admin密码)
查看>>
随机抽取文件内容中的一行
查看>>
【Ian Goodfellow 强推】GAN 进展跟踪 10 大论文(附下载)
查看>>
服务器机房环境要求
查看>>
从捡破烂到亿万富翁,这个快递人的故事比电视剧还励志
查看>>
Linux自学笔记——tcp wrapper
查看>>
Windows安装MySQL 5.7.19及相关问题处理
查看>>
查看aix下安装并升级的C/C++ compiler 的版本
查看>>
编写hive udf函数
查看>>
Ubuntu 16.04 LTS 常用工具软件整理(陆续更新)
查看>>