Overload new and delete operator

本文介绍了一种在C++中自定义内存管理的方式,包括new和delete操作符的重载实现,以及针对C++类的特定内存分配和释放方法。

// for stdandard type

#pragma pack(push,8)
#pragma warning(push,3)

#pragma push_macro("new")
#undef new

inline void* __cdecl operator new(size_t size)
{
     return malloc(size);
}
inline void* __cdecl operator new(size_t size,const char*file,const int line)
{
     return malloc(size);
}
inline void __cdecl operator delete(void*ptr)
{
     return free(ptr);
}

inline void* __cdecl operator new[](size_t size)
{
     return ::operator new(size);
}
inline void __cdecl operator delete[](void* p)
{
     ::operator delete(p);
}

inline void * __cdecl operator new( size_t size, void *p )

     return  realloc( p,size);
}
inline void * __cdecl operator new[]( size_t size, void *p )

     return  realloc( p,size);
}

#pragma pop_macro("new")

//for c++ class

class CWnd

{

     inline void* operator new(size_t size)
     {    
         return malloc(size);
     }
     inline void*operator new(size_t size,const char*file,const int line)
     {
         return malloc(size);
     }
     inline void operator delete(void*ptr)
     {
         return free(ptr);
     }     
     inline void* operator new[](size_t size)
     {
         void* p =  malloc(size);
         return p;
     }    
     inline void operator delete[](void* p)
     {
         operator delete(p);
     } 
     void *operator new( size_t size, void *p ) 
     { 
         return  realloc( p,size);
     }
     void *operator new[]( size_t size, void *p ) 
     { 
         unsigned int * p1 = (unsigned int*)((unsigned int) p - 4);
         CWnd* p2 = (CWnd*)p;
         for( int i = 0;i<size;i++)
              p2[i].~CWnd();
         return  realloc( p1,size);
     }

}

转载于:https://www.cnblogs.com/cgwolver/archive/2009/01/15/1376248.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值