社区
C语言
帖子详情
决定提一个有点难度的问题,关于new/delete 的重载(先只讨论VC)
Kevin_qing
2001-07-16 10:06:24
加精
有没有办法做到在一个.cpp里面使用某一个new/delete对,在另外一个.cpp里面使用另外一对?
使用不同的new可以通过宏实现,但是我没有办法使用不同的delete,因为delete只能是void delete(LPVOID)类型。
...全文
3163
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)
Java的Map如何在初始化的时候就添加好数据
如何在Java的Map初始化时添加数据 在日常开发中,我们经常需要在初始化Map对象时就添加一些数据,以便在后续操作中直接使用。本文将介绍如何在Java的Map初始化时就添加数据,并
提
供
一个
实际
问题
的解决方案。 实际
问题
假设我们有
一个
需求:需要初始化
一个
Map对象,其中包含一些预设的数据。比如说我们需要初始化
一个
Map,...
JAVA往map添加元素_java list map在初始化的时候添加元素
List list =
new
ArrayList(){{add("First Object");add("Second Object");add("Third Object");}};Map map =
new
HashMap(){{put("First Key", "First Value");put("Second Key", "Second Value");put("Third Key",...
java list怎么添加map数据类型
在Java中如何向List中添加Map数据类型 在Java中,向List中添加Map数据类型是非常常见的操作。我们可以使用List接口
提
供的add方法来实现这个功能。下面将详细介绍如何向List中添加Map数据类型,并附带代码示例。 1. 创建
一个
Map对象 首
先
,我们需要创建
一个
Map对象,用来存储数据。Map是一种键值...
Java中操作Map集合时:使用Map.of()添加数据报错 java.lang.UnsupportedOperationException 解决办法以及注意事项
Java8操作Map集合时:使用Map.of()添加数据报错 java.lang.UnsupportedOperationException 解决办法以及注意事项
Java map 加入数据
我整理的一些关于【数据】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/eDOcp1Java Map 数据添加教程 首
先
,想要在 Java 中使用 Map 数据结构,我们需要理解 Map 是一种键值对集合,它允许通过键来快速访问值。对于刚入行的小白来说,学习如何向 Map 中...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章