new和DEBUG_NEW

armor2 2008-06-27 02:35:28
#define DEBUG_NEW new(THIS_FILE, __LINE__)
void* operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
{
return NULL;
}
#define new DEBUG_NEW

请问
new(THIS_FILE, __LINE__)
void* operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
怎么参数个数不一样呢?
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
anzhuge 2008-06-28
  • 打赏
  • 举报
回复
xx
pigsanddogs 2008-06-27
  • 打赏
  • 举报
回复
operator new 必须要求第一次个参数是size_t, 后面的是没有硬性规定, 可以随便定义。
比如
operator new(size_t, int, int, int, int)
则通过 new(int, int, int, int) class 的代码调用这个函数

只是c++规定了2个默认的实现,
一个是
operator new(size_t) // 普通调用 new class
一个是
operator new(size_t, void*) // replacement new, new (address) class
直接把address这个地址返回

vc的DEBUG_NEW之需要记录这个LPCSTR lpszFileName, int nLine两个信息,
所以实现了你看到的这个函数
经过了上述的宏后
new class 就变成了
new(THIS_FILE, __LINE__) class
于是编译器计算了下class的size后,开始调用下列函数,并期待返回一个可用的内存快。
void* operator new(size_t nSize, LPCSTR lpszFileName, int nLine);
cnzdgs 2008-06-27
  • 打赏
  • 举报
回复
int* p = new(THIS_FILE, __LINE__) int;
函数的第1参数是sizeof(int),第2参数是THIS_FILE,第3参数是__LINE__。
superdiablo 2008-06-27
  • 打赏
  • 举报
回复
new CMyClass实际上自动传入了一个sizeof(CMyClass)参数,明白了吧。
skinfeature 2008-06-27
  • 打赏
  • 举报
回复
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
cppwin 2008-06-27
  • 打赏
  • 举报
回复
CObject 对 operator new 有 3个重载形式

CObject::operator new

void* PASCAL operator new(
size_t nSize
);
void* PASCAL operator new(
size_t,
void* p
);
void* PASCAL operator new(
size_t nSize,
LPCSTR lpszFileName,
int nLine
);



In the Debug version, operator new participates in an allocation-monitoring scheme designed to detect memory leaks.

If you use the code line
#define new DEBUG_NEW

before any of your implementations in a .CPP file, then the second version of new will be used, storing the filename and line number in the allocated block for later reporting. You do not have to worry about supplying the extra parameters; a macro takes care of that for you.

Even if you do not use DEBUG_NEW in Debug mode, you still get leak detection, but without the source-file line-number reporting described above.


element_cn 2008-06-27
  • 打赏
  • 举报
回复
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种分布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型分布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统中的建模与求解实践,帮助用户掌握MOPSO在实际工程问题中的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡分析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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