重载new和delete运算符

 在C++中可以重载new和delete运算符,重载new时注意参数须设置为size_t,当然UINT也可以,其他的如WORD,DWORD都不行;重载delete是参数应设为void *。下面是一个例子,还模拟了构造函数与new的执行顺序:

  1. // 重载newdelete.cpp : main project file.
  2. #include "stdafx.h"
  3. #include "windows.h"
  4. #include "iostream"
  5. using namespace std;
  6. using namespace System;
  7. class A
  8. {
  9. public:
  10.     A()
  11.     {
  12.         cout << "A()" << endl;
  13.     }
  14.     ~A()
  15.     {
  16.         cout << "~A()" << endl;
  17.     }
  18.     void * operator new(size_t size)
  19.     {
  20.         if (m_kHeap == NULL)
  21.         {
  22.             m_kHeap = HeapCreate(HEAP_NO_SERIALIZE, 0, 0);
  23.             if (m_kHeap == NULL)
  24.             {
  25.                 return NULL;
  26.             }
  27.         }
  28.         void *p = HeapAlloc(m_kHeap, 0, size);
  29.         if (p != NULL)
  30.         {
  31.             ++m_iNum;
  32.         }
  33.         cout << "New" << endl;
  34.         return p;
  35.     }
  36.     void operator delete(void *p)
  37.     {
  38.         if (HeapFree(m_kHeap,0,p))
  39.         {
  40.             m_iNum--;
  41.         }
  42.         if (m_iNum == 0)
  43.         {
  44.             if (HeapDestroy(m_kHeap))
  45.             {
  46.                 m_kHeap = NULL;
  47.             }
  48.         }
  49.         cout << "Delete" << endl;
  50.     }
  51. private:
  52.     static HANDLE m_kHeap;
  53.     static int m_iNum;
  54. };
  55. HANDLE A::m_kHeap = NULL;
  56. int A::m_iNum = 0;
  57. int main(array<System::String ^> ^args)
  58. {
  59.     A *a = new A;
  60.     delete a;
  61.     getchar();
  62.     return 0;
  63. }

 

结果为:

New

A()

~A()

Delete

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值