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

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

//练习12.10-11 shared_ptr
p(new int(42));//process(p);//process(shared_ptr
(p)); //用p来初始化创建一个临时的智能指针 //也指向p所指向的内存 process(shared_ptr
(p.get())); //用p.get()返回的内置指针来初始化创建一个 //临时的智能指针,指向p所指向的内存 //当离开process函数的作用域时,这个临时智能指针会被销毁 //其所指向的内存也被释放掉 //因为调用结束后指向这块内存的智能指针数为0 //导致再次使用这块内存时会得到未定义的结果 int i = *p;cout << i; //练习12.11的函数 void process(shared_ptr
ptr) {
  //Do Something... }
//练习12.12auto p = new int();auto sp = make_shared
();process(sp); //正确//process(new int()); //错误,传入的是一个局部临时int*内置指针//process(p); //错误,传入的是一个int*内置指针process(shared_ptr
(p)); //正确,将int*指针强制类型转换为智能指针 //并传入一个临时局部的智能指针 //函数调用返回时这个局部指针会被销毁 //计数变为0 //其指向的空间也将会被自动释放
//练习12.13auto sp = make_shared
(42);auto p = sp.get();delete p; //没有释放其所指向的内存 //因为仍有智能指针sp指向这块内存 //计数为1cout << sp.use_count() << endl; cout << *sp << " " << *p;

切忌混用智能指针和内置指针,特别是用内置指针初始化智能指针,即

int *p = new int(42);shared_ptr
sp(p);

  

转载于:https://www.cnblogs.com/ChenZhongzhou/p/5352770.html

你可能感兴趣的文章
MyBatis在insert插入操作时返回主键ID的配置
查看>>
使用eclipse的todo标签管理任务
查看>>
iOS 开发自定义一个提示框
查看>>
CentOS6.5加域
查看>>
互联网+时代,移动互联网安全怎么自我防范呢?
查看>>
图片上传预览功能
查看>>
org.apache.log4j.Logger 详解
查看>>
Tiny Linux -- tce-load
查看>>
Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
查看>>
vue中get和post请求
查看>>
2015-2016 ACM-ICPC, NEERC, Southern Subregional Contest A Email Aliases(模拟STL vector+map)
查看>>
Mr. Frog’s Game
查看>>
3.4可靠数据传输的原理
查看>>
多媒体通信-3-30-2018
查看>>
【Spring Boot&&Spring Cloud系列】Spring Boot中使用数据库之MySql
查看>>
【Spring Boot && Spring Cloud系列】那些Spring Boot中踩过的坑
查看>>
对XX系统的可用性和易用性改良
查看>>
大数据如何解决人工智能对文本挖掘的挑战
查看>>
updatepanel的属性
查看>>
.net 客户端调用java或.net webservice进行soapheader验证
查看>>