亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? smartptr.h

?? C++垃圾回收框架
?? H
?? 第 1 頁 / 共 2 頁
字號:

#ifndef	_SMARTPTR_H_
#define	_SMARTPTR_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/*************************************************************************
 FILE :			SmartPtr.h
 Date :			20 December 1998

 Author :		Stefan Tchekanov  (stefant@iname.com)

 Description:	The template class SmartPtr performs Reference Counting
				Garbage Collection and/or Object Level Thread Synchronization.

 Classes :		SmartPtr		-	The SmartPtr class
				RefCountPtr		-	Reference Counting Garbage Collection
				SyncPtr			-	Synchronized access without Reference Counting Garbage Collection
				SyncRefCountPtr	-	Synchronized access with Reference Counting Garbage Collection
				SmartPtrBase	-	The base of all above classes. Used as a common base so
									an assignment between different pointers is able.
				
				For examples how to use these classes look at the end
				of this file.

				Implementation classes that SHOULD NEVER be used directly.
 					CRefCountRep
 					CSyncAccessRep
 					CSyncRefCountRep
 					CSyncAccess

Copyright notice:
	Written by Stefan Tchekanov (stefant@iname.com)
	Copyright(c) 1998,1999,2000

This code may be used in compiled form in any way you desire. This
file may be redistributed unmodified by any means PROVIDING it is 
not sold for profit without the authors written consent, and 
providing that this notice and the authors name is included. If 
the source code in this file is used in any commercial application 
then a simple email would be nice.

This file is provided "as is" with no expressed or implied warranty.
The author accepts no liability if it causes any damage to your
computer.

*************************************************************************/
/* #    Revisions    # */

/*************************************************************************
  REVISION ON 7.January.2000 14:31:34  By Stefan Tchekanov
 
  Comments  : SmartPtr objects can point to objects of other types
			  not only to objects of their type.
 
 *************************************************************************/


/*************************************************************************
  REVISION ON 09 April 1999 11:24:38 By Stefan Tchekanov
 
  Comments  : SmartPtr objects now have size of a real pointer, Which
			  means that passing a SmartPtr as a function parameter is 
			  as efficient as passing an int or a pointer.
 
 *************************************************************************/


/////////////////////////////////////////////////////////////////////////////
//	If you wrap a non-class with the SmartPtr class, you will receive 
//	this warning. i.e.  int, short, etc...
//	It is a warning you may ignore.
#pragma warning( disable : 4284 )
//
//	This warning is generated when compiling in debug mode.
//	Debug symbols cannot be longer than 255 but when using templates
//	it is usual to have debug symbols longer tahn 255.
//	You may ignore this warning.
#pragma warning( disable : 4786 )

/////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////
//	Representation class just for reference counting
/////////////////////////////////////////////////////////////////////////////

template<class T>
class CRefCountRep {

//	Constructors and destructor
public:
	CRefCountRep( const T* ptr );
	~CRefCountRep();


//	Operations
public:
	long	incrRefCount();
	long	decrRefCount();

	T*		getPointer() const;
	T*		getRealPointer() const;

	bool	isNull() const;


//	Implementation
private:
	T*		m_pRealPtr;
	long	m_counter;
};
/////////////////////////////////////////////////////////////////////////////

template<class T>
CRefCountRep<T>::CRefCountRep( const T* ptr )
 : m_pRealPtr( (T*)ptr ), m_counter( 0 ) {
}

template<class T>
CRefCountRep<T>::~CRefCountRep() {
	ASSERT( m_counter <= 0 );
	delete	m_pRealPtr;
}

template<class T>
long	CRefCountRep<T>::incrRefCount() {
	return	::InterlockedIncrement( &m_counter );
}

template<class T>
long	CRefCountRep<T>::decrRefCount() {
	return	::InterlockedDecrement( &m_counter );
}

template<class T>
T*	CRefCountRep<T>::getPointer() const {
	return	m_pRealPtr;
}

template<class T>
T*	CRefCountRep<T>::getRealPointer() const {
	return	m_pRealPtr;
}

template<class T>
bool	CRefCountRep<T>::isNull() const {
	return m_pRealPtr == NULL;
}
/////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////

template <class T>	class	CSyncAccess;

/////////////////////////////////////////////////////////////////////////////
//	Representation class just for thread synchronization
/////////////////////////////////////////////////////////////////////////////

template<class T>
class CSyncAccessRep {

//	Constructors and destructor
public:
	CSyncAccessRep( const T* ptr );
	~CSyncAccessRep();


typedef	CSyncAccess<T>	ACCESS;


//	Operations
public:
	long	incrRefCount();
	long	decrRefCount();
	
	ACCESS	getPointer() const;
	T*		getRealPointer() const;

	bool	isNull() const;

	void	acquireAccess();
	void	releaseAccess();


//	Implementation
protected:
	T*					m_pRealPtr;
	long				m_counter;
	CRITICAL_SECTION	m_CriticalSection;
};
/////////////////////////////////////////////////////////////////////////////

template<class T>
CSyncAccessRep<T>::CSyncAccessRep( const T* ptr )
 : m_pRealPtr( (T*)ptr ), m_counter( 0 ) {
	::InitializeCriticalSection( &m_CriticalSection );
}

template<class T>
CSyncAccessRep<T>::~CSyncAccessRep() {
	ASSERT( m_counter <= 0 );
	::DeleteCriticalSection( &m_CriticalSection );
}

template<class T>
long	CSyncAccessRep<T>::incrRefCount() {
	return	::InterlockedIncrement( &m_counter );
}

template<class T>
long	CSyncAccessRep<T>::decrRefCount() {
	return	::InterlockedDecrement( &m_counter );
}

template<class T>
CSyncAccessRep<T>::ACCESS	CSyncAccessRep<T>::getPointer() const {
	return	this;	//	Object of type ACCESS (CSyncAccess<T>) 
					//	will be automatically created on the stack
}

template<class T>
T*	CSyncAccessRep<T>::getRealPointer() const {
	return	m_pRealPtr;
}

template<class T>
bool	CSyncAccessRep<T>::isNull() const {
	return m_pRealPtr == NULL;
}

template<class T>
void	CSyncAccessRep<T>::acquireAccess() {
	::EnterCriticalSection( &m_CriticalSection );
}

template<class T>
void	CSyncAccessRep<T>::releaseAccess() {
	::LeaveCriticalSection( &m_CriticalSection );
}
/////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////
//	Representation class for Reference Counting AND Thread Synchronization
/////////////////////////////////////////////////////////////////////////////

template<class T>
class CSyncRefCountRep : public CSyncAccessRep<T> {

//	Constructors and destructor
public:
	CSyncRefCountRep( const T* ptr );
	~CSyncRefCountRep();
};
/////////////////////////////////////////////////////////////////////////////

template<class T>
CSyncRefCountRep<T>::CSyncRefCountRep( const T* ptr )
 : CSyncAccessRep<T>( ptr ) {
}

template<class T>
CSyncRefCountRep<T>::~CSyncRefCountRep() {
	ASSERT( m_counter <= 0 );
	delete	m_pRealPtr;		//	This is the only change needed to make in
							//	CSyncRefCountRep<T> class to collect the garbage and 
							//	in the same time to do Object Level Thread Synchronization
}
/////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////
//
//	The SyncAccess class. It is used as an intermediary to achieve
//	Object Level Thread Synchronization
//
/////////////////////////////////////////////////////////////////////////////

template <class T>
class	CSyncAccess {

//	Internally used data type
private:
	typedef		CSyncAccessRep<T>	REP;


//	Constructors and destructors
public:
	//	Copy constructor
	CSyncAccess( const CSyncAccess& that );
	CSyncAccess( const REP* rep );
	~CSyncAccess();


//	Operators
public:
	T*	operator -> ();


//	Implementation
private:
	REP*	m_rep;
	bool	m_acquired;
};
/////////////////////////////////////////////////////////////////////////////

template <class T>
CSyncAccess<T>::CSyncAccess( const REP* rep ) 
 : m_rep( (REP*)rep ), m_acquired( false ) {
}
template <class T>
CSyncAccess<T>::CSyncAccess( const  CSyncAccess<REP>& that )
 : m_rep( that.m_rep ), m_acquired( false ) {
}

template <class T>
CSyncAccess<T>::~CSyncAccess() {
	if( m_acquired ) {
		m_rep->releaseAccess();
	}
}

template <class T>
T*	CSyncAccess<T>::operator -> () {
//	This is checked by SmartPtr<T>::operator -> () too
	ASSERT( (m_rep != NULL) && (! m_rep->isNull()) );
	if( ! m_acquired ) {
		m_rep->acquireAccess();
		m_acquired = true;
	}
	return	m_rep->getRealPointer();
}
/////////////////////////////////////////////////////////////////////////////





/////////////////////////////////////////////////////////////////////////////
//	The SmartPtr class
/////////////////////////////////////////////////////////////////////////////

class	SmartPtrBase {
public:
	SmartPtrBase() : m_rep( NULL )
	{};

	void*	m_rep;
};
/////////////////////////////////////////////////////////////////////////////

template<class T, class REP, class ACCESS = T*>
class SmartPtr :	public SmartPtrBase {

//	Constructors and destructor
public:
	//	Default constructor and destructor
	SmartPtr();
	~SmartPtr();

	//	Copy constructor
	SmartPtr( const SmartPtr& ptr );

	//	Other constructors
	SmartPtr( const T* ptr );
	SmartPtr( const SmartPtrBase& ptr );


//	Assignment Operators
public:
	SmartPtr& operator = ( const SmartPtr& ptr );
	SmartPtr& operator = ( const T* ptr );
	SmartPtr& operator = ( const SmartPtrBase& ptr );


//	Operators
public:
	ACCESS	operator -> ();
	T&		operator * ();

	//	Casting operator
	operator T* ();

	//	Comparison Operators
	bool	operator == ( const SmartPtrBase& ptr );
	bool	operator == ( const T* ptr );
	bool	operator != ( const SmartPtrBase& ptr );
	bool	operator != ( const T* ptr );


//	Attributes
public:
	bool	IsNull() const;
	long	GetRefCount() const;
	REP*	GetRepPtr() const;


//	Helper methods
protected:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久夜色精品国产噜噜av| 欧美国产国产综合| 成人av影视在线观看| 狠狠色丁香婷婷综合久久片| 亚洲精品菠萝久久久久久久| 一区二区在线观看免费| 国产夜色精品一区二区av| 国产精品午夜电影| 日韩欧美一区二区免费| 欧美这里有精品| 毛片一区二区三区| 亚洲精品免费在线| 毛片av中文字幕一区二区| 成人99免费视频| 麻豆精品视频在线观看| 蜜桃av一区二区在线观看| 欧美一区二区不卡视频| 国产福利一区二区三区视频 | 中文字幕中文在线不卡住| 日韩美女一区二区三区| 日韩av一区二| proumb性欧美在线观看| 亚洲精品免费视频| 精品粉嫩超白一线天av| 国产精品一区二区果冻传媒| 久久久久久麻豆| 粉嫩av一区二区三区粉嫩| 中文字幕电影一区| 亚洲第一会所有码转帖| 夜夜嗨av一区二区三区网页| 国产成人免费网站| 93久久精品日日躁夜夜躁欧美| 国产在线精品一区二区不卡了 | 亚洲欧洲国产专区| 天堂精品中文字幕在线| 一区二区三区在线视频播放| 国产精选一区二区三区| 99久久精品费精品国产一区二区| 欧美大片在线观看| www一区二区| 六月丁香婷婷久久| 欧美大片在线观看| 蜜乳av一区二区三区| 精品裸体舞一区二区三区| 国产精品一线二线三线| 欧美r级在线观看| 日韩激情一二三区| 99精品视频在线播放观看| 成人激情图片网| 色婷婷久久一区二区三区麻豆| 欧美大片一区二区| 麻豆一区二区99久久久久| 91福利在线看| 91精品国产免费| 亚洲视频中文字幕| 欧美日韩亚洲高清一区二区| 日本一区二区久久| 国内精品伊人久久久久av影院| 99re在线精品| 午夜精品久久久久影视| 91精品福利在线一区二区三区| 免费日韩伦理电影| 亚洲欧美激情插| 久久久av毛片精品| 欧美精品在线一区二区| 成人在线综合网站| 裸体健美xxxx欧美裸体表演| 国产肉丝袜一区二区| 日韩欧美中文字幕公布| 欧美色爱综合网| 一区二区三区美女| 欧美日本韩国一区二区三区视频| 91亚洲国产成人精品一区二区三 | 欧美一区在线视频| 成人中文字幕在线| 国产综合久久久久久鬼色| 日韩国产精品久久久久久亚洲| 26uuu成人网一区二区三区| 欧美在线小视频| 波多野洁衣一区| 成人97人人超碰人人99| 成人深夜福利app| 韩国三级在线一区| av在线综合网| 日本高清视频一区二区| 欧美电影一区二区| 欧美挠脚心视频网站| 日韩一区二区影院| 欧美精品一区二区在线播放| 精品日韩一区二区三区| 国产午夜精品一区二区| 国产女同性恋一区二区| 亚洲日本电影在线| 欧美激情在线一区二区| 亚洲欧洲精品一区二区三区不卡 | 亚洲va欧美va天堂v国产综合| 亚洲国产wwwccc36天堂| 伊人开心综合网| 一区二区三区四区在线免费观看| 亚洲一级二级三级在线免费观看| 国产精品第一页第二页第三页| 亚洲成人综合网站| 极品少妇一区二区三区精品视频 | 蜜桃91丨九色丨蝌蚪91桃色| 91在线视频网址| 精品国产成人在线影院| 国产精品欧美久久久久无广告 | 色成人在线视频| 一本色道**综合亚洲精品蜜桃冫| 91久久奴性调教| 欧美精品乱码久久久久久| 69p69国产精品| 亚洲精品一区二区三区福利| 国产精品美女久久久久久久 | 国产黑丝在线一区二区三区| 97成人超碰视| 久久久久久久久久久电影| 亚洲国产综合色| aaa欧美色吧激情视频| 欧美一级专区免费大片| 日韩欧美的一区二区| 久久久夜色精品亚洲| 日韩精品亚洲专区| 99免费精品视频| 欧美精品vⅰdeose4hd| 国产欧美视频一区二区| 精品一区二区在线播放| 欧美乱熟臀69xxxxxx| 亚洲美女精品一区| 99精品久久只有精品| 国产精品第五页| 成人免费视频caoporn| 欧美国产激情一区二区三区蜜月| 国产尤物一区二区| 亚洲精品在线免费观看视频| 蜜臀av一级做a爰片久久| 日韩精品一区二区三区swag| 亚洲国产精品久久人人爱蜜臀 | 欧美日韩国产综合久久| 亚洲已满18点击进入久久| 色香色香欲天天天影视综合网| 一区在线观看视频| 欧美唯美清纯偷拍| 日韩福利视频导航| 精品人在线二区三区| 国产精品小仙女| 日韩av网站免费在线| 综合av第一页| 国产亚洲欧美日韩日本| 欧美日韩电影在线播放| 粉嫩一区二区三区性色av| 日韩精品成人一区二区三区| 欧美电影免费观看高清完整版| 波多野结衣在线一区| 青青草原综合久久大伊人精品优势| 一色桃子久久精品亚洲| 久久久久久久综合| 日韩欧美区一区二| 欧美日韩国产另类不卡| 99vv1com这只有精品| 国模大尺度一区二区三区| 欧美aaaaa成人免费观看视频| 一区二区三区在线看| 国产精品女主播在线观看| 国产午夜亚洲精品午夜鲁丝片| 欧美韩国一区二区| 日韩欧美一区中文| 26uuu色噜噜精品一区二区| 51精品国自产在线| 欧美一区二区日韩一区二区| 欧美日韩国产首页在线观看| 91国在线观看| 欧美mv日韩mv国产网站app| 精品1区2区在线观看| 国产精品国产三级国产普通话99 | 成人欧美一区二区三区| 天天影视色香欲综合网老头| 国产suv精品一区二区883| 欧美视频一区二区三区四区| 精品日韩在线观看| 亚洲午夜久久久久久久久久久 | 日韩午夜激情电影| 91丨porny丨中文| 国产传媒一区在线| 国产呦精品一区二区三区网站| 日韩高清一区二区| 亚洲国产成人高清精品| 一级女性全黄久久生活片免费| 日韩精品一区二区三区蜜臀| 6080日韩午夜伦伦午夜伦| 色综合欧美在线视频区| 91在线免费播放| 欧美少妇bbb| 国产午夜精品福利| 石原莉奈在线亚洲三区| 丁香六月久久综合狠狠色| 欧美一区二区高清| 亚洲精品写真福利| 本田岬高潮一区二区三区| 久久免费美女视频|