一个类似于Java的GC功能的指针.(二)

ookook ookook 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
由于MSDN说不能连续回复超过三次,所以另开一个 :)
//GarbageCollect.h文件(第四部分)


template <typename _C>
bool operator == (const int _X, const _GC_Y<_C>& _T)
{
return _T == _X;
}
template <typename _C>
bool operator != (const int _X, const _GC_Y<_C>& _T)
{
return _T != _X;
}

template <typename _C>
class _GC_Z
{
public:
_GC_Z()
{
m_pBaseClass = NULL;
}
~_GC_Z()
{
delete m_pBaseClass;
}
_GC_Y<_C>& operator()(_C* pBuf)
{
#ifdef _DEBUG
m_pBaseClass = new _GC_Y<_C>(pBuf);
_GC_ASSERT(NULL != m_pBaseClass);
return *m_pBaseClass;
#else
//这个地方在Release版本中内存分配失败时存在问题(不过发生几率很小,约为%0.01)
return *(m_pBaseClass = new _GC_Y<_C>(pBuf));
#endif
}
_GC_Y<_C>& operator [] (unsigned int uiSize)
{
#ifdef _DEBUG
m_pBaseClass = new _GC_Y<_C>(uiSize);
_GC_ASSERT(NULL != m_pBaseClass);
return *m_pBaseClass;
#else
//这个地方在Release版本中内存分配失败时存在问题(不过发生几率很小,约为%0.01)
return *(m_pBaseClass = new _GC_Y<_C>(uiSize));
#endif
}
private:
_GC_Y<_C>* m_pBaseClass;
};

#pragma warning(default: 4284)

#define _GC_NEW
#define GC_NEW _GC_NEW

#define GC_POBJECT(_X) _GC_Y<_X>
#define GC_PBOOL _GC_Y<bool>
#define GC_LPBOOL _GC_Y<bool>
#define GC_PSTR _GC_Y<char>
#define GC_LPSTR _GC_Y<char>
#define GC_PSZ _GC_Y<char>
#define GC_PCHAR _GC_Y<char>
#define GC_PUCHAR _GC_Y<unsigned char>
#define GC_PBYTE _GC_Y<unsigned char>
#define GC_LPBYTE _GC_Y<unsigned char>
#define GC_PSHORT _GC_Y<short>
#define GC_PUSHORT _GC_Y<unsigned short>
#define GC_PWORD _GC_Y <unsigned short>
#define GC_LPWORD _GC_Y<unsigned short>
#define GC_PINT _GC_Y<int>
#define GC_LPINT _GC_Y<int>
#define GC_PUINT _GC_Y<unsigned int>
#define GC_LPUINT _GC_Y<unsigned int>
#define GC_PLONG _GC_Y<long>
#define GC_LPLONG _GC_Y<long>
#define GC_PULONG _GC_Y<unsigned long>
#define GC_PDWORD _GC_Y<unsigned long>
#define GC_LPDWORD _GC_Y<unsigned long>
#define GC_PFLOAT _GC_Y<float>
#define GC_LPVOID _GC_Y<char>

#define GC_OBJECTS(_X) _GC_Z<_X>()
#define GC_OBJECT(_X, _Y) _GC_Z<_X>()(new _X##_Y)
#define GC_BOOL _GC_Z<bool>()
#define GC_STR _GC_Z<char>()
#define GC_CHAR _GC_Z<char>()
#define GC_UCHAR _GC_Z<unsigned char>()
#define GC_BYTE _GC_Z<unsigned char>()
#define GC_SHORT _GC_Z<short>()
#define GC_USHORT _GC_Z<unsigned short>()
#define GC_WORD _GC_Z<unsigned short>()
#define GC_INT _GC_Z<int>()
#define GC_UINT _GC_Z<unsigned int>()
#define GC_LONG _GC_Z<long>()
#define GC_ULONG _GC_Z<unsigned long>()
#define GC_DWORD _GC_Z<unsigned long>()
#define GC_FLOAT _GC_Z<float>()
#define GC_VOID _GC_Z<char>()

#ifdef _UNICODE
#define GC_PTSTR GC_PWORD
#define GC_LPTSTR GC_LPWORD
#define GC_PTCHAR GC_PWORD
#define GC_LPTCHAR GC_LPWORD
#define GC_TCHAR GC_WORD
#else
#define GC_PTSTR GC_PSTR
#define GC_LPTSTR GC_LPSTR
#define GC_PTCHAR GC_PCHAR
#define GC_LPTCHAR GC_PCHAR
#define GC_TCHAR GC_CHAR
#endif

#endif /* end _GARBAGE_COLLECT_H */
...全文

相关推荐

IBM、SUN等公司的Java面试题

找工作要面试,有面试就有对付面试的办法。以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel, Motorola, SUN, 以及其它大小公司。   面试是没什么道理可讲的,它的题目有的不合情理、脱离实际。有在纸上写的,有当面考你的,也有在电话里问的,给你IDE的估计很少(否则你赶快去买彩票, 说不定中)。

fanhaiyizhou

java应用JVM的GC频率观察方法

GC频率从另一个角度反应了系统的健康情况。 GC有两种类型:Scavenge GC(也称Young GC)和Full GC。 一般Full GC时,机器的Load会升高,应用也会停止响应一会(持续长达几秒),如果应用一直频繁的进行FullGC,一方面会出现应用无法提供正常服务,另一方面甚至会导致应用崩溃址至挂掉。 所以观察应用的GC频率是可以提前发现应用的不健康问题,提前发现故障隐患,这在新应用上线的观察期尤其重要。 观察GC的方法有很多,本文详细讲述了一些特定场景下使用的方法。

pxleo

Java GC的过程

NULL 博文链接:https://wangwengcn.iteye.com/blog/1606192

weixin_38669628

Java full gc触发情况实例解析

主要介绍了Java full gc触发情况实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38653691

java垃圾回收(gc)机制详解

java垃圾回收(gc)机制详解

caofeng891102
评论 7
收藏 已收藏
分享
返回顶部
ookook
C++ 语言 65,214 成员 250,514 内容