所以阅读一些代码,并且有一种我不理解的语法.
代码是这样的
int * aPtr = new int();
if(!aPtr) // this part I don't understand
{
//some code here
}
Run Code Online (Sandbox Code Playgroud)
我猜测语法是询问指针是否指向null,但在我读过的大多数书中,通常都是这样说的
if(aPtr == NULL)
{
}
Run Code Online (Sandbox Code Playgroud)
你的问题中有三点重要
空指针的计算结果为零:
空指针常量是整数类型的整数常量表达式(5.19)prvalue,其计算结果为零 ...(§4.10/ 1)
因此,要检查指针是否为空,可以将其检查为零.传统方式(来自C的遗留)来检查变量是否为零
if (!var) // if (var == 0)
Run Code Online (Sandbox Code Playgroud)
NULL?它是一个积分常数表达式,其计算结果为零,但是......忘记使用NULL,使用0或nullptr替代.有关更多信息,请阅读"我应该使用NULL还是0?"
new失败与否?...当C++程序将空指针结果作为错误指示而不是bad_alloc异常时,它由新表达式的放置版本调用.(18.6.1.1/5)
int *aPtr = new int();
if(!aPtr)
Run Code Online (Sandbox Code Playgroud)
您似乎想要检查是new成功还是失败.这是错误的,因为如果失败则抛出一个异常,程序将无法到达if (!aPtr).因此,你应该处理它try/catch.
此外,您可以强制编译器停止抛出异常并返回null.为此,你应该尝试:
int* aPtr = new(std::nothrow) int();
Run Code Online (Sandbox Code Playgroud)