【C++】引用计数器简单示例

原创 2015年07月11日 09:10:47
//引用计数器  
// 封装一个计数器的类来维护,可以隐藏起来,即用户不必关心是如何实现的  
#include <iostream>
using namespace std;
class String_Rep
{
	friend class String;
public:
	String_Rep(const char *str = " ") :count(0)
	{
		m_data = new char[strlen(str) + 1];
		strcpy(m_data, str);
	}
	~String_Rep()
	{
		delete[]m_data;
	}
public:
	void increment()
	{
		count++;
	}
	void decrement()
	{
		if (--count == 0)
		{
			delete this;// 哪一个rep的count为0了释放当时的rep  
		}
	}
private:
	char *m_data;
	int count;
};
//////////////////////////////////////////////////////////////////////

class String
{
public:
	String(const char *str = " ") :rep(new String_Rep(str))
	{
		rep->increment();
	}
	String(const String &s) :rep(s.rep)
	{
		rep->increment();
	}
	String& operator=(const String &s)
	{
		if (this != &s)
		{
			rep->decrement();    // 迭代器  
			rep = s.rep;
			rep->increment();
		}
		return *this;
	}
	~String()
	{
		rep->decrement();
	}
public:
	void print()const
	{
		cout << rep->m_data << endl;
	}
private:
	String_Rep *rep;// 句柄  
};

int main()
{
	String s1("hello");
	String s2;
	s2 = s1;
	String s3("world");
	String s4;
	s4 = s3;
	s1.print();
	s2.print();
	s3.print();
	s4.print();
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ 引用计数器

今天讲一个实用的东西,C++类的引用计数,不废话直接上代码;#ifdef WIN32 #include #else #include #endif using namespace std; cl...

C++引用计数思想--利用引用计数器自定义String类

什么是引用计数?  最直观的垃圾收集策略是引用计数。引用计数很简单,但是需要编译器的重要配合,并且增加了赋值函数 (mutator) 的开销(这个术语是针对用户程序的,是从垃圾收集器的角度来看的...

GDI泄露终极解决方案——HOOK API,建立GDI对象引用计数器

和内在泄漏一样,GDI使用不当也会导致对象泄漏。不一样的是GDI对象泄漏更隐蔽,而且目前还没有较好的调试工具可用。等到发现自己的项目因GDI泄漏而shutdown为时已晚。下意识的就会想到回去修正代码...

php变量的引用计数器和写时复制

众所周知,PHP是不支持指针的,但是如果希望两个变量同时指向同一内存块怎么办呢?为了解决这个问题,PHP内核里使用了引用计数器。 上篇博文介绍了PHP变量在内核中的存储方式了,zval结构中下面两个...

PHP 引用计数器 通俗版解释

PHP变量赋值底层做了什么动作,变量间赋值什么时候简单地修改引用计数器,什么时候进行变量分离? 本文给你最通俗的解释,看完一遍后完全理解~

黑马程序员---03引用计数器的基本使用

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

垃圾回收器算法之引用计数器法

垃圾回收器算法之引用计数器法            微软将运行在公共语言运行时里的代码成为托管代码;但是从更广泛的意义上来说,只要语言提供了自动内存管理功能,我们使用其开发的代码都可以称为托管代码...

OC中 NSString引用计数器和initWithFormat:(NSString *)string中String的存储区

前几天OC试题测验,关于NSString  的计数机制考试了好几道题,又在自己实验的时候发现格式化初始字符串时,字符串存储在哪里是和字符串的复杂度有关的因此我觉得有必要整理一下。 引子: ...

对象引用计数器

引用计数算法作为垃圾收集器最早的算法,有其优势,也有其劣势,虽然现在的JVM都不再采用引用计数算法进行垃圾回收【例如Sun的Java hotspot采用了火车算法进行垃圾回收】,但这种算法也并未被淘汰...

iOS 基本内存管理-引用计数器

转自:http://www.2cto.com/kf/201403/284358.html 1.什么是内存管理   移动设备的内存极其有限,每个app所能占用的内存是有限制的 当ap...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)