【发布时间】:2010-11-29 06:55:08
【问题描述】:
为了检测内存泄漏,重新定义了 new 关键字。 如果我使用 [Type 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;
}
【问题讨论】:
-
为什么这么复杂?为什么不按照msdn.microsoft.com/en-us/library/e5ewb1h3(VS.80).aspx 的描述进行操作?
-
上面的代码没有问题吗?请尝试取消注释“Type 2”。
标签: c++ new-operator