实现类似shared_ptr的引用计数
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(),use(new size_t()) {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==)
{
delete ps;
delete use;
}
//指向新的内存空间
ps=h.ps;
i=h.i;
use=h.use;
return *this;
}
//如果在赋值操作中删除了左边对象的内存空间,则此处调用析构函数时将不再删除内存空间,但是该对象还是会被析构
~HasPtr()
{
if(--*use==)
{
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 ;
}
实现类似shared_ptr的引用计数的更多相关文章
- std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题
在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已.std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移 ...
- shared_ptr 引用计数
https://zh.cppreference.com/w/cpp/memory/shared_ptr 引用计数
- 单例模式应用 | Shared_ptr引用计数管理器
在我们模拟设计 shared_ptr 智能指针时发现,不同类型的 Shared_ptr 不能使用同一个引用计数管理器,这显然会造成内存上的浪费.因此我们考虑将其设计为单例模式使其所有的 Shared_ ...
- [转] weak_ptr解决shared_ptr环状引用所引起的内存泄漏
http://blog.csdn.net/liuzhi1218/article/details/6993135 循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引 ...
- weak_ptr解决shared_ptr环状引用所引起的内存泄漏[转]
转载:http://blog.csdn.net/liuzhi1218/article/details/6993135 循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理 ...
- C语言的引用计数与对象树
引用计数与对象树 cheungmine 2013-12-28 0 引言 我们经常在C语言中,用指针指向一个对象(Object)的结构,也称为句柄(Handle),利用不透明指针的技术把结构数据封装成对 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- iOS开发--引用计数与ARC
以下是关于内存管理的学习笔记:引用计数与ARC. iOS5以前自动引用计数(ARC)是在MacOS X 10.7与iOS 5中引入一项新技术,用于代替之前的手工引用计数MRC(Manual Refer ...
- Python 对象的引用计数和拷贝
Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己 ...
随机推荐
- File List()列出文件目录
import java.io.File; public class FileTest { public static void main(String[] args) { File myFile = ...
- jni.h头文件详解二
作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/42932813 转载请注明出处:http://blog.csdn.net/shao ...
- [HDU 1806] Frequent values
Frequent values Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- UpdatePanel无法直接弹出窗口的解决
UpdatePanel无法直接弹出窗口的解决 2010-06-20 来自:博客园 字体大小:[大 中 小] 摘要:本文介绍一些UpdatePanel无法直接弹出窗口的解决方法 ///<sum ...
- 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途
原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...
- (转)如何正确使用C++多重继承
http://bigasp.com/archives/486 如何正确使用C++多重继承 2011年06月17日 — Asp J 原创文章,转载请注明:转载自Soul Apogee本文链接地址:如何正 ...
- Http get,post,soap协议的区别
转自:http://www.cnblogs.com/c2303191/articles/1107027.html 1.Http作为web服务的首选协议,具有4大优点:1)http非常简单,以纯文本(超 ...
- opencv保存选择图像中的区域
在自己建立行人检测的图像库时用到,参考别人的修改了一下: #include "opencv2/core/core.hpp" #include "opencv2/highg ...
- 【转】RDO、SAD、SATD、λ
SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即绝对误差和 SATD(Sum of Absolute Transformed Di ...
- 【HTML】Intermediate3:Meta Tags
1.Meta tags were the town criers of the Internet Do anything to the content that is presented in the ...