⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 detectdump.h

📁 HGE 2D游戏引擎制作的一个演示
💻 H
字号:
/*************************************************

				检测内存溢出支持
			 只有在_DEBUG模式下有效

*************************************************/

#ifndef CORE_DETECTDUMP_H //DetectDump
#define CORE_DETECTDUMP_H 

#ifdef _DEBUG 

#ifdef new 
#undef new 
#endif 

namespace SDK_DetectDump
{ 
	class CRunDetectDump	//开启检测内存
	{ 
	public: 
		CRunDetectDump()
		{
			::_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
			::_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_DEBUG );
		} 
	}; 

	class CValidCS			//有效临界区
	{ 
	private: 
		CRITICAL_SECTION	m_CS_Dump;

	public: 
		CValidCS()			{ ::InitializeCriticalSection( &m_CS_Dump ); } 
		~CValidCS()			{ ::DeleteCriticalSection( &m_CS_Dump ); } 
		void EnterCS()		{ ::EnterCriticalSection( &m_CS_Dump ); } 
		void LeaveCS()		{ ::LeaveCriticalSection( &m_CS_Dump ); } 
	}; 

	class CInvalidCS		//无效临界区
	{ 
	public: 
		CInvalidCS()		{ } 
		~CInvalidCS()		{ } 
		void EnterCS()		{ } 
		void LeaveCS()		{ } 
	}; 

	class CControlCS		//控制临界区
	{ 
	public: 
		CControlCS() { GetLock()->EnterCS(); } 
		~CControlCS() { GetLock()->LeaveCS(); } 

//#ifdef _MT					//根据编译链接条件判断是否使用临界区
//		typedef CValidCS lock_cs; 
//#else 
		typedef CInvalidCS lock_cs; 
//#endif 

		static lock_cs* GetLock()
		{ 
			static lock_cs lock; 
			return &lock; 
		} 
	}; 
} 

// 代替普通的 new
inline void* __cdecl operator new( size_t nSize, const char* lpszFileName, int nLine ) 
{ 
	static SDK_DetectDump::CRunDetectDump _rundetectdump; 
	SDK_DetectDump::CControlCS _cs; 
	return ::_malloc_dbg( nSize, _NORMAL_BLOCK, lpszFileName, nLine ); 
} 

// 当 new 表达式调用的构造函数抛出异常时可以正确地释放内存 
inline void __cdecl operator delete( void* p, const char* /*lpszFileName*/, int /*nLine*/ ) 
{ 
	SDK_DetectDump::CControlCS _cs; 
	::_free_dbg( p, _NORMAL_BLOCK ); 
} 

// 代替普通的 delete 
inline void __cdecl operator delete( void* p) 
{ 
	SDK_DetectDump::CControlCS _cs; 
	::_free_dbg( p, _NORMAL_BLOCK ); 
} 

#define new new(__FILE__, __LINE__) 

#endif //_DEBUG 

#endif //CORE_DETECTDUMP_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -