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

本文共 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

你可能感兴趣的文章
form 表单
查看>>
POJ 1012 Joseph
查看>>
Nordic Collegiate Programming Contest 2016
查看>>
基础复习-算法设计基础 | 复杂度计算
查看>>
201671010128 2017-09-17《Java程序设计》之步步深入面向对象
查看>>
Linux内核在I386架构下的内存管理
查看>>
构建vue单页应用(一)
查看>>
最小公倍数
查看>>
HDOJ_ACM_Can you find it?
查看>>
SpringMVC-常用的注解
查看>>
羊车门问题
查看>>
用substr()截取中文出现乱码的解决方法
查看>>
Java练习 SDUT-2400_高中数学?
查看>>
UGUI组件之InputField 组件简单笔记(输入栏 输入框 )
查看>>
java-随学随记之基础篇
查看>>
Linux 统计文件夹,文件数量的命令
查看>>
spring hibernate实现动态替换表名(分表)
查看>>
精通ArrayList,关于ArrayList你想知道的一切
查看>>
KeyStore和TrustStore
查看>>
iOS - WKWebView加载不受信任的https (因用到IP地址加端口号去请求数据)
查看>>