打印

重载问题

[复制链接]
958|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dfsa|  楼主 | 2012-5-14 18:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <cstdlib>
#include <iostream>
#include<memory>
#include<cstddef>

using namespace std;

class Temp
{
public:
  void * operator new(size_t size,int i) //不管是否加上static修饰词,new,delete都将为静态成员函数  
  {
  if(i>10) throw 11;
  cout<<"分配内存"<<endl;
  int *p=new int[i];
  return p;
  }
  static void operator delete(void *s)
  {
  cout<<"释放内存"<<endl;
  ::operator delete (s);
  }
};   

int main(int argc, char *argv[])
{
  int i=11;
  int *s;
  Temp t;
while(i>10){
  try
  {
  s=new int(i);
  i--;
  delete(s);
  }catch(int)
  {
  cout<<"run out of memory"<<endl;
  }
  catch(...)
  {
  cout<<"捕获任何异常"<<endl;
  }
}
  system("PAUSE");
  return EXIT_SUCCESS;
}

上述程序中为什么我用s=new int(i);没有调用重载运算符啊!而是直接掉用new动态分配内存呢

相关帖子

沙发
baidudz| | 2012-5-14 19:18 | 只看该作者
你重载的operator new函数是作用域仅在class Temp内。
而你的s=new int(i);是不会到那个作用域里去调用operator new函数的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

282

主题

2404

帖子

2

粉丝