决定提一个有点难度的问题,关于new/delete 的重载(先只讨论VC)

Kevin_qing 2001-07-16 10:06:24
加精
有没有办法做到在一个.cpp里面使用某一个new/delete对,在另外一个.cpp里面使用另外一对?

使用不同的new可以通过宏实现,但是我没有办法使用不同的delete,因为delete只能是void delete(LPVOID)类型。
...全文
3087 71 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
71 条回复
切换为时间正序
请发表友善的回复…
发表回复
subdragon 2002-01-05
  • 打赏
  • 举报
回复
同意
ylb_and_xy 2001-12-11
  • 打赏
  • 举报
回复
<<effective C++>>有详细的说明,你可以看看。
forrest9910 2001-11-23
  • 打赏
  • 举报
回复
TMD 搞什么
wd2306 2001-08-05
  • 打赏
  • 举报
回复
gz
asm386 2001-07-31
  • 打赏
  • 举报
回复
可以看一看 vtoolsd 的类库源码。
他可以用 c++ 编写驱动程序,肯定改写 new 、delete

再可以的找一找 c++ 2.1 的规范
Kevin_qing 2001-07-23
  • 打赏
  • 举报
回复
我发现给分实在是一件很累人的事情···
Kevin_qing 2001-07-23
  • 打赏
  • 举报
回复
准备给分了。
一共300
其中
cber 80
ed9er 80
APIer 60

(3个都是er结尾的,实在巧啊)

剩下的给前8个参与的每个10分,还满意啊
AlexXin 2001-07-21
  • 打赏
  • 举报
回复
Use Class
Kevin_qing 2001-07-20
  • 打赏
  • 举报
回复
ps
ecfa 2001-07-20
  • 打赏
  • 举报
回复
^w^
Kevin_qing 2001-07-19
  • 打赏
  • 举报
回复
global delete没有办法定义为其他的东西,并且只要你的程序里面自己实现了global delete ,那么最后所有编译出来的代码一定是调用你的delete operator (lib里面的不会),所以我只要在实现一个global delete,甚至不用在.h里面声明就可以搞定delete的替换。
Kevin_qing 2001-07-19
  • 打赏
  • 举报
回复
既然多加一个参数不行,那么就在这个已经有的参数上面动手脚。
定义自己的new operator
void* operator new(size_t s,LPCSTR file,DWORD line)
{

}

和MFC的只有最后一个参数不太一样,但是可以隐式转换。

DEBUG_NEW定义为new(__FILE__,(DWORD)__LINE__)
在stdafx.h里面include我的重定义的DEBUG_NEW

编译的时候编译器发现两个global new
new (size_t,LPCSTR ,int)//MFC
new (size_t,LPCSTR ,DWORD) //mine

但是经过我的宏定义后,我自己的new的参数是最适合的,
所以所有的global new都被我接管了,而CObject的new 我也没有影响到(因为CObject没有new(size_t,LPCSTR DWORD)所以CObject::new (size_t ,LPCSTR,int)是最接近的)。

并且因为所有的global new都被我接管,所以delete 操作符用一个就可以了。



Kevin_qing 2001-07-19
  • 打赏
  • 举报
回复
现在公布研究的结果。

先看new operator.

对于new 来说,要overload实在是简单,因为它本来就可以传递多个参数,只要通过宏定义为不同的参数形式,就可以在不同的文件里面调用不同的new了,这是我最开始的想法。
现在看看结果如何:
#undef new
#undef DEBUG_NEW
#define DEBUG_NEW new(__FILE__,__LINE__,0)
#define new DEBUG_NEW
定义DEBUG_NEW只是因为MFC会在DEBUG方式将new定义为debug_new,如果不重新定义DEBUG_NEW的话,也就没有办法在MFC产生的.cpp里面使用新的new operator了。
传多一个参数,这样的话就不会调用到MFC的new 了。

看起来很不错是吧,不过·····在使用了new CObject的派生类的情况就会出问题。

因为在debug状态下面,cobject的new operator是new(LPCSTR,int)参数的,而我这里多了一个参数,于是根本没法编译通过了


phoenix96_2000 2001-07-19
  • 打赏
  • 举报
回复
?
Kevin_qing 2001-07-19
  • 打赏
  • 举报
回复
我已经通过你的了啊~你没有收到?
APIer 2001-07-19
  • 打赏
  • 举报
回复
Kevin_qing(Kevin) 
我通过了你的qq身份认证,你快通过我的才行啊:)
Kevin_qing 2001-07-19
  • 打赏
  • 举报
回复
gz继续
FireBow 2001-07-19
  • 打赏
  • 举报
回复
关注
dsli 2001-07-19
  • 打赏
  • 举报
回复
受益匪浅
Kevin_qing 2001-07-19
  • 打赏
  • 举报
回复
咦?什么啊?我又没有叫你写·····
加载更多回复(51)

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧