社区
C语言
帖子详情
决定提一个有点难度的问题,关于new/delete 的重载(先只讨论VC)
Kevin_qing
2001-07-16 10:06:24
加精
有没有办法做到在一个.cpp里面使用某一个new/delete对,在另外一个.cpp里面使用另外一对?
使用不同的new可以通过宏实现,但是我没有办法使用不同的delete,因为delete只能是void delete(LPVOID)类型。
...全文
3103
71
打赏
收藏
决定提一个有点难度的问题,关于new/delete 的重载(先只讨论VC)
有没有办法做到在一个.cpp里面使用某一个new/delete对,在另外一个.cpp里面使用另外一对? 使用不同的new可以通过宏实现,但是我没有办法使用不同的delete,因为delete只能是void delete(LPVOID)类型。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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开发--坦克大战
在Windows程序设计中,
VC
6.0是
一个
经典且广泛使用的集成开发环境(IDE),它集成了编译器、调试器和资源编辑器,方便开发者编写和调试C++代码。在这个项目中,开发者可能使用了MFC(Microsoft Foundation Classes)...
又一款
VC
俄罗斯方块游戏.rar
7. **内存管理**:理解C++的动态内存分配(
new
和
delete
)以及智能指针(如auto_ptr, unique_ptr, shared_ptr)的使用,能有效避免内存泄漏。 通过分析这个
VC
++俄罗斯方块游戏的源代码,初学者可以深入理解C++面向...
VisualC++6.0
C++是对C语言的扩展,它在C语言的基础上增加了类、继承、多态等面向对象的概念,并且增加了一些新的特性,如内联函数、默认参数、引用、const修饰符、
重载
函数、作用域运算符以及
new
/
delete
运算符等。 内联函数是...
用
VC
++实现九宫图
1. **MFC(Microsoft Foundation Classes)框架**:
VC
++ 6.0主要依赖MFC库,这是
一个
面向对象的C++类库,用于简化Windows应用程序的开发。在实现九宫图时,可能会使用MFC的控件,如CDialog或CStatic,来创建用户界面...
C++
new
和
delete
的使用
new
和
delete
是C++里非常重要的两个关键字,意味着从“自由存储(堆)”分配指定大小的内存和释放掉这些内存。这些用法哪怕初学者也会,但是今天要讲的不是这个。今天要讲的是使用中容易忽视的细节和可能引发的错误...
C语言
70,034
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章