gpt4 book ai didi

c++ - 使用 CRT 内存泄漏检测时出现编译错误

转载 作者:太空狗 更新时间:2023-10-29 22:52:23 24 4
gpt4 key购买 nike

为了检测内存泄漏,重新定义了 new 关键字。如果我使用 [类型 1] 就可以了。但是如果我取消注释 [Type 2] 就会出现编译错误。有什么办法可以同时使用这两种类型的 new 吗?

#include <crtdbg.h>

#define new new(_CLIENT_BLOCK, __FILE__, __LINE__)

struct Foo
{
int m_N;
Foo() : m_N( 0 ) {}
};

int main( int argc, char* argv[] )
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
_CrtSetReportMode(_CRT_WARN , _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);

int* pI = new int( 1 );
delete pI;

Foo* pFoo = new Foo; // [Type 1]
//Foo* pFoo2 = new (pFoo) Foo(); // [Type 2]

return 0;
}

最佳答案

因为您的宏会导致您的 placement new 扩展到:

Foo* pFoo2 = new(_CLIENT_BLOCK, __FILE__, __LINE__) (pFoo) Foo();

这显然是无效的语法。

MSFT 工程师 confirms :

#define of new is not compatible with placement new

所以你不能将它与 crtdbg.h 一起使用。

关于c++ - 使用 CRT 内存泄漏检测时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4301505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com