社区
C语言
帖子详情
决定提一个有点难度的问题,关于new/delete 的重载(先只讨论VC)
Kevin_qing
2001-07-16 10:06:24
加精
有没有办法做到在一个.cpp里面使用某一个new/delete对,在另外一个.cpp里面使用另外一对?
使用不同的new可以通过宏实现,但是我没有办法使用不同的delete,因为delete只能是void delete(LPVOID)类型。
...全文
3087
71
打赏
收藏
决定提一个有点难度的问题,关于new/delete 的重载(先只讨论VC)
有没有办法做到在一个.cpp里面使用某一个new/delete对,在另外一个.cpp里面使用另外一对? 使用不同的new可以通过宏实现,但是我没有办法使用不同的delete,因为delete只能是void delete(LPVOID)类型。
复制链接
扫一扫
分享
转发到动态
举报
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)
vc
6.0开发--坦克大战
基于
vc
6.0的windows程序设计--坦克大战,能够简要地实现基础的功能,一共有五道关卡,时间有限,所以游戏做的很简单,有需要的自取。
又一款
VC
俄罗斯方块游戏.rar
又一款
VC
俄罗斯方块游戏源代码,只是实现了基本的游戏画面布局和游戏逻辑,可作为
一个
VC
初学者的学习范例。
VisualC++6.0
这是关于visual6.0的学习用ppt第一张概论,可以帮助你了解
VC
++6的一些基本知识。
用
VC
++实现九宫图
本程序是用
VC
++6.0实现的九宫图
问题
,有需要的同学可以来下载,下载后记得评论哦!!!
C++
new
和
delete
的使用
new
和
delete
是C++里非常重要的两个关键字,意味着从“自由存储(堆)”分配指定大小的内存和释放掉这些内存。这些用法哪怕初学者也会,但是今天要讲的不是这个。今天要讲的是使用中容易忽视的细节和可能引发的错误首
先
,
new
和
delete
总是成对出现,顺序也不能错。一定是
先
new
再
delete
。其次,
new
和
delete
是针对单个对象,还有
new
[]和
delete
[]针对数组。最后,我们
先
从最简单的使用开始,慢慢带入。
new
和
delete
还可以操作自定义对象。struct t {
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章