::new(_NORMAL_BLOCK, __FILE__, __LINE__),麻烦高人解释下这用法
::new(_NORMAL_BLOCK, __FILE__, __LINE__)
#include <iostream>using namespace std;void *operator new(size_t size,char *file,int line){ cout<<size<<endl<<file<<endl<<line; return ::operator new(size);}#define new new(__FILE__,__LINE__)int main(){ int *p=new int; system("pause"); delete p; return 0;}
[解决办法]
如果是 int *p=new int; 那么就是为指针P分配一个整型的空间
而int *p=new(__FILE__,__LINE__) int; 就说明用new(__FILE__,__LINE__) int 来申请内存空间,申请多少要看new(__FILE__,__LINE__)的实现是怎么样的了,其中这个new有两个参数传入 __FILE__和__LINE__。
[解决办法]
参数是放在里面的,看来你是没明白new的概念,new是用来申请内存的,new+类型,申请这个类型的所需要的内存。
而你的
void fun(int a, int b, int c)
{
}
int main()
{
fun(1,2) 3; //根本就不能这么写嘛!!!
}
3应该是写到里面去的:fun(1,2,3) ;
new其实并没有 new(参数2,参数3) 参数1,而是 new(参数1,参数2) 类型,对比一下吧。
[解决办法]
这是一个自动检查内存泄漏问题的头文件:debugnew.h至于功能慢慢体会#ifndef _DEBUG#else#ifndef _CRTDBG_MAP_ALLOC#define _CRTDBG_MAP_ALLOC#endif#include <crtdbg.h>#define CHECKMEMORY() do{ \ int nFlag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG ); \ nFlag |= _CRTDBG_LEAK_CHECK_DF; \ _CrtSetDbgFlag( nFlag ); \ } while(0);inline void * __cdecl operator new(unsigned int size, const char *file, int line){ CHECKMEMORY() return ::operator new(size, _NORMAL_BLOCK, file, line);};#define DEBUG_NEW new(__FILE__, __LINE__)#define new DEBUG_NEW#endif