13.27 定义使用引用计数版本的HasPtr

#include<iostream>
#include<string>
#include<new>using namespace std;
class HasPtr
{
public:HasPtr(const string &s=string()):ps(new string(s)),i(0),use(new size_t(1)) {cout<<"constructer"<<endl;}HasPtr(const HasPtr &h):i(h.i){cout<<"copy constructer"<<endl;ps=h.ps;++*h.use;use=h.use;}HasPtr& operator=(const HasPtr &h){++*h.use;//将原来分配的内存空间删除while(--*use==0){delete ps;delete use;}//指向新的内存空间ps=h.ps;i=h.i;use=h.use;return *this;}//如果在赋值操作中删除了左边对象的内存空间,则此处调用析构函数时将不再删除内存空间,但是该对象还是会被析构~HasPtr(){if(--*use==0){delete ps;delete use;}cout<<"destructer"<<endl;}
private:string *ps;int i;size_t *use;
};
int main()
{HasPtr h;HasPtr hh(h);hh=h;return 0;
}

转载于:https://www.cnblogs.com/wuchanming/p/3925826.html

实现类似shared_ptr的引用计数相关推荐

  1. shared_ptr的引用计数原理

    引用计数原理 指向相同资源的所有 shared_ptr 共享"引用计数管理区域",并采用原子操作保证该区域中的引用计数值被互斥地访问."引用计数管理区域"是指通 ...

  2. 智能指针shared_ptr之引用计数

    上篇文章 

  3. c++string 加引号_C++|引用计数与shared_ptr智能指针(以实现String类为例)

    C++ 中,动态内存的管理是通过一对运算符来完成的,new 用于申请内存空间,调用对象构造函数初始化对象并返回指向该对象的指针.delete接收一个动态对象的指针,调用对象的析构函数销毁对象,释放与之 ...

  4. 智能指针shared_ptr引用计数工作原理

    引用计数原理 shared_ptr的实现是这样的:  shared_ptr模板类有一个__shared_count类型的成员_M_refcount来处理引用计数的问题.__shared_count也是 ...

  5. shared_ptr循环引用定置删除器

    shared_ptr虽然方便,但是它有着一个致命的缺陷就是循环引用问题,因为shared_ptr本身并没有能力解决这个问题,所以我们又引入了弱指针weak_ptr来辅助shared_ptr解决这个问题 ...

  6. Swift学习:自动引用计数

    swift 使用自动引用计数(ARC)机制来跟踪和管理你的应用程序的内存.通常情况下,swift 内存管理机制会一直起作用,你无须自己来考虑内存的管理.ARC 会在类的实例不再被使用时,自动释放其占用 ...

  7. iOS 自动引用计数和内存泄露

    自动引用计数与解决内存泄露 自动引用计数主要用于管理和释放内存. 引用计数 我们在创建一个对象的时候,系统会为其分配内存,而什么时候和谁来释放对象内存成了问题,如果不释放,就会导致内存不足.所以苹果公 ...

  8. Swift2.1 语法指南——自动引用计数

    原档: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programm ...

  9. shared_ptr 循环引用问题以及解决办法

    栗子 #include <iostream> #include <memory>class CB; class CA { public:CA() { std::cout < ...

  10. linux获取文件引用计数,linux-2.6内核模块引用计数的实现

    一.模块使用计数的背景知识 模块是一种可以在内核运行过程中动态加载.卸载的内核功能组件.2.6内核中模块的命名方式为*.ko.模块在被使用时,是不允许被卸载的.编程时需要用"使用计数&quo ...

最新文章

  1. spring cloud 日志_微服务架构开发实战:ElasticStack实现日志集中化
  2. linux的文件系统及节点表
  3. 【 FPGA/IC 】常考加法器总结
  4. Java Collections.sort方法对list集合排序
  5. [转载]Eclipse SVN插件比较 Subclipse vs Subversive
  6. SQL SERVER 用sql语句将一列数据拼接成一个字符串
  7. 利用Eclipse连接JDBC-(SQL Server2008)
  8. javaweb学习总结(三十九):数据库连接池
  9. navicat10.1.7英文版_【纯干货】风险评估和管理(PDA TR 49内容节选11 中英文版)...
  10. Mac OS使用技巧之一:查看Finder中的.bash_profile等系统隐藏文件
  11. C++ 使用extern C简单使用
  12. 论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入
  13. python 替换array中的值_Python实现计数排序
  14. 大数据分析如何助力企业发展
  15. 计算一个数的二进制中一的个数(三种方法)
  16. 数据安全生命周期管理介绍(一)
  17. M3U8文件简介及在线播放器
  18. 1米*1米*1米*1米*1米等于什么?
  19. pyqt5按钮拖拽,实现拖拽新增和拖拽移动
  20. 【学习笔记】Android基础知识回顾

热门文章

  1. 【CF1312E】Array Shrinking(dp)
  2. 虚拟主机网站搬到服务器上,如何把网页文件放到云虚拟主机
  3. Python里Matplotlib的pyplot模块绘制简单图形小例子
  4. python月份字符串_python实现字符串和日期相互转换的方法
  5. 单板计算机图片大全,最强单板计算机UP Board之Windows10完全版、Ubuntu、Andriod系统体验 | 爱板网...
  6. MCS:连续随机变量——Beta分布
  7. 翻译:iOS上的MVVM + RxSwift架构对比 MVC,MVVM,MVP和VIPER
  8. 微软收缩nano服务器容器图像,微软将推出全新服务器操作系统:Nano Server
  9. c语言山东科技大学答案oj,山东科技大学oj部分题目记答案.doc
  10. freemaker if 多个条件_小函数,大用处!巧用AND函数,避开IF函数嵌套