另一个问题是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。

Linux下用gedit制作脚
Linux新内核2.6.26测
Linux环境下的Java开
Linux环境下的Java开
Linux系统下带图形界
Ubuntu 7.10下配置Jav
Gtk#程序在Linux和Win
Linux内核IOCTL网络控