首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C/C++判断指针空与不空的步骤哪样合理,还是都可以,还是在都可以的情况下某个最合理

2013-03-26 
C/C++判断指针空与不空的方法哪样合理,还是都可以,还是在都可以的情况下某个最合理C/C++判断指针空与不空

C/C++判断指针空与不空的方法哪样合理,还是都可以,还是在都可以的情况下某个最合理
C/C++判断指针空与不空的方法哪样合理,还是都可以,还是在都可以的情况下某个最合理?
1. 
char *pT =NULL;
pT = new char[10];
if (!pT) 
 {
     do something;
 }
else
 {
     do others;
 }

///==============================================================================
2.
char *pT = NULL;
pT = new char[10];
if (NULL == pT)
{
    do somthing;
}
else
{
    do others;
}

[解决办法]
一样。这种问题你可以把if (NULL == pT)和if (!pT)都写出来,然后查看反汇编就知道哪个好了。
VS2005环境查看结果:
if (NULL == pT)
cmp         dword ptr [ebp-98h],0
jne         wmain+0B8h (41B528h) 

if (!pT)
cmp         dword ptr [ebp-98h],0
jne         wmain+0B8h (41B528h) 
所以二者一致。
[解决办法]
1. 

p = new T();
 
若内存分配失败, 抛出std::bad_alloc异常,应该用异常处理而不是判断p的值
2. C++ 也支持不抛异常的内存分配,此时需要判断

p = new (std::nothrow)T(); 
if(NULL != p)
{
}


3. 内存分配失败一般就是异常,所以用抛出异常的new更合理

4. if(NULL == p)更直观,代码可读性更好。




[解决办法]
引用:
如果 内存没有分配成功不是要返回一个空指针吗,怎么会不能执行呢


如下仅仅是示例说明new失败的情形

如果不用异常机制,程序就挂了。你注释掉那些try/catch看看

或者如#10楼的方法屏蔽异常

void* operator new(size_t)
{
throw 3;
return NULL;
}

int main(int n,char* arg[])
{
char *p=NULL;
try
{
p=new char();
if(NULL==p);
}
catch(...)
{
;
}

return 0;
}

热点排行