读书人

:new(_NORMAL_BLOCK, _FILE_ _LINE_)

发布时间: 2012-03-30 17:32:09 作者: rapoo

::new(_NORMAL_BLOCK, __FILE__, __LINE__),麻烦高人解释下这用法

C/C++ code
::new(_NORMAL_BLOCK, __FILE__, __LINE__)


[解决办法]
看看这个范例,能解楼主的疑惑
C/C++ code
#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) 类型,对比一下吧。
[解决办法]
C/C++ code
这是一个自动检查内存泄漏问题的头文件: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 

读书人网 >C++

热点推荐