Windows与Linux编译器的区别(3)

  (2)new操作符的出错处理

  另一个问题是new操作符的出错处理。由于编译器的设置不同,new操作符可能具有不同的行为。考察如下的代码段:

#include
class A
{
public:
void *operator new( size_t size )
{
return NULL;
}
A()
{
printf("Constructor called\n");
a = 0;
}
private:
int a;
};

int main()
{
A *p = new A();
printf("%x\n", p );
return 0;
}

  在Visual C++ 2003中,上面的程序输出0。而GCC 4.1.0编译器的输出结果为:

   Constructor called
   Segmentation fault

  也就是说,Visual C++ 2003的编译器会检查new的返回值,如果返回为空,构造函数就不再执行。但是gcc必须加上–fcheck-new编译参数才具有这一行为:g++ –fcheck-new test.cpp。这样在Linux上上述程序也会输出0。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzwfyx.html