2011-01-30 67 views

回答

6

C++中的坏new将抛出一个异常(除非你使用std ::抛出异常),指针不会被分配,这样它会不管它是被做了new调用之前。

但是,您可能会对this article感兴趣,其中谈到强制new如您在问题中提到的那样在失败时返回null。

0

当一个异常被抛出,叠层被展开(运行本地对象的析构函数),直到停止catch除外。没有任何东西会自动将指针设置为NULL,并且其中一个析构函数可以这么做 - 这可能是一个人为的例子。

通常情况下,没有必要将指针设置为NULL。事实上,你通常不能。看看下面的代码:

try { 
    std::string s("hello, world"); 
} catch (std::bad_alloc) { 
// ??? 
} 

这有可能是这12个字节的分配失败。异常将从std::string的构造函数返回。在这一点上,对象s已不存在,也没有指针s._SomeInternalNames。如果您尝试在catch块中使用s,编译器会报告错误。如果指针不存在了,你显然不能将它设置为0.