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

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

  静态内存:局部static对象、类static成员、全局变量。

  栈内存:函数内非static对象。

  分配在静态或栈内存中的对象由编译器自动创建和销毁,对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,程序结束时销毁

  堆内存:用于动态分配,要显示销毁。

 智能指针

  智能指针定义在头文件memory中。

  shared_ptr类

  智能指针为模板,创建时需提供类型,默认初始化的智能指针中保存着一个空指针。

  p.use_count()  //返回引用计数,可能很慢,调试用

  p.unique()  //引用计数为1时为true

  make_shared函数

  使用make_shared函数分配使用动态内存,使用时与模板类相同,在函数名后跟尖括号给出类型名。

  通常可以用auto来定义对象保存make_shared的结果,例如:

  auto p = make_shared<int>(10);

  shared_ptr拷贝和赋值

  拷贝或赋值操作:

  auto p1(p);

  当拷贝一个shared_ptr时,引用计数的计数器会递增,当给shared_ptr赋一个新值或是销毁时,计数器会递减,当计数器为0时,会自动释放自己管理的对象。

  auto r = make_shared<int>(10);  //r指向的对象由一个引用者

    r=q;  //r指向别的对象,r原指的对象没有引用者,自动释放

  可以用new返回的指针来初始化智能指针,但必须使用直接初始化:

  shared_ptr<int> p1(new int (1024));  //内置指针不能隐式转换为智能指针,不能用等号赋值。

  智能指针定义了一个名为get的函数,返回一个内置指针,使用get返回的指针的代码不能delete该指针,且不能将另一个智能指针也绑定到get返回的指针上(虽然编译器不会报错)。

  unique_ptr类

  unique_ptr指向的对象在同一时间内只能被该指针指向,当该指针销毁后,指向的对象也被销毁。

  使用u.release()可以将u置为空,并返回该指针。

  unique_ptr不支持拷贝和赋值,但可以拷贝或赋值一个将要被销毁的unique_ptr,例如函数返回一个unique_ptr或返回一个局部unique_ptr的拷贝

  weak_ptr类

  weak_ptr指向一个shared_ptr对象,但不会改变引用计数,当引用计数为0时即使weak_ptr指向对象,对象也会被释放

  w.use_count()  //返回shared_ptr的引用计数

  w.expired()  //引用计数为0时返回true

  w.lock()  //如果expired()返回为true,返回一个空的shared_ptr,否则返回指向w的shared_ptr

  创建wear_ptr时要用shared_ptr初始化。

  

  

转载于:https://www.cnblogs.com/wshr007/p/10511546.html

你可能感兴趣的文章
xml约束技术之dtd
查看>>
项目Beta冲刺(团队3/7)
查看>>
PHP和MySQL应用实战(更新完毕)
查看>>
使用switchshow/supportshow命令确认Brocade交换机型号(转载)
查看>>
KMP字符串模式匹配学习笔记
查看>>
设计模式 - 装饰器模式(Decorator)
查看>>
在线工具地址
查看>>
Binary Tree Right Side View
查看>>
Windows中安装BeautifulSoup
查看>>
题目1:删除排序数组中的重复数字
查看>>
爱奇艺在文本舆情挖掘上的技术探索和实践
查看>>
动手动脑-5
查看>>
wire [7:0] regAddr; 理解
查看>>
云存储的那些事(1)——数据冗余
查看>>
android状态机机制StateMachine
查看>>
滚动条自适应宽度的问题
查看>>
第二次作业——个人项目实战
查看>>
HighCharts图表控件在ASP.NET WebForm中的使用
查看>>
C#汉字转拼音
查看>>
Remote Service 和 Local App的交互
查看>>