真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

深拷貝以及引用計(jì)數(shù)-創(chuàng)新互聯(lián)

#define _CRT_SECURE_NO_WARNINGS 
 
#include 
using namespace std;
#include 
//深拷貝
class String
{
public:
String(const char* pData)
: _pData(new char[strlen(pData) + 1])
{
strcpy(_pData, pData);
}
 
String(const String& s)//拷貝構(gòu)造,深拷貝,指針傳遞
: _pData(NULL)
{
String temp(s._pData);
std::swap(_pData, temp._pData);
}
 
String& operator=(String s)//賦值運(yùn)算符重載,深拷貝,值傳遞
{
std::swap(_pData, s._pData);
return *this;
}
~String()
{
if (NULL != _pData)
{
delete[] _pData;
_pData = NULL;
}
}
private:
char* _pData;
};//深拷貝


//引用計(jì)數(shù)
namespace COW
{
class String
{
public:
String(const char* pData)
: _pData(new char[strlen(pData) + 1])
, _refCount(new int)
{
*_refCount = 1;
strcpy(_pData, pData);
}
 
// String s2(s1);
String(String& s)//s1和s2共用
: _pData(s._pData)//指向同一空間
, _refCount(s._refCount)//共用同一段引用計(jì)數(shù)
{
++(*_refCount);
}
 
// s1 = s2;
String& operator=(String s)
{
if (this != &s)
{
if (--(*_refCount) == 0)//檢查這塊空間是否只有自己使用
{
delete[] _pData;
delete _refCount;//檢測(cè)完釋放歸還操作系統(tǒng)
}
 
_pData = s._pData;//再指向另一塊空間
_refCount = s._refCount;
++(*_refCount);
}
 
return *this;
}
 
~String()
{
if (--(*_refCount) == 0)
{
delete[] _pData;
delete _refCount;
}
}
 
private:
char* _pData;
int* _refCount;
};
}
//優(yōu)化引用計(jì)數(shù)
class String
{
public:
	String(const char* pData)
		: _pData(new char[strlen(pData) + 5])
	{
		*((int*)_pData) = 1;
		_pData += 4;  // _pData = _pData + sizeof(char)*4;
		strcpy(_pData, pData);
		
	}

	// s2(s1);
	String(const String& s)
		: _pData(s._pData)
	{
		++GetRef();
		strcpy(_pData, s._pData);
	}

	// s2 = s3;
	String& operator=(const String& s)
	{
		if (this != &s)
		{
			if (--GetRef() == 0)
			{
				delete[](_pData - 4);
			}

			_pData = s._pData;
			++GetRef();
		}
		return *this;
	}

	~String()
	{
		if (--GetRef() == 0)
		{
			delete[](_pData - 4);
		}
	}

private:
	int& GetRef()
	{
		return (*((int*)(_pData - 4)));
	}
private:
	char*_pData;
};
 
測(cè)試引用計(jì)數(shù)和深拷貝所用時(shí)間
class Time
{
public:
Time()
{
begin = GetTickCount();
}
 
~Time()
{
int end = GetTickCount();
cout << "end - begin = " << end - begin << endl;
}
 
private:
int begin;
};
 
 
void FunTest()
{
Time t;
COW::String s1("12345");//引用計(jì)數(shù)
COW::String s2(s1);
 
 for (int iIdx = 0; iIdx < 1000000; ++iIdx)
 {
 s1 = s2;
 }
}
 
 
 
void FunTest2()
{
Time t;
 
String s1("123456789");
String s2("2345678");
for (int iIdx = 0; iIdx < 1000000; ++iIdx)
{
s1 = s2;
}
}
int main()
{
FunTest();
FunTest2();
system("pause");
return 0;
}

創(chuàng)新互聯(lián)建站是一家專(zhuān)業(yè)提供鹿邑企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為鹿邑眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


分享標(biāo)題:深拷貝以及引用計(jì)數(shù)-創(chuàng)新互聯(lián)
當(dāng)前地址:http://weahome.cn/article/cciejh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部