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

怎的判断new是否成功了

2013-07-01 
怎样判断new是否成功了?怎样判断new是否成功呢?每次new的时候都应该判断吗?[解决办法]new 失败的时候会抛

怎样判断new是否成功了?
怎样判断new是否成功呢?每次new的时候都应该判断吗?
[解决办法]
new 失败的时候会抛出异常, 如果你没有捕获这个异常的话, 程序会直接崩溃退出
[解决办法]
new失败会抛 bad_alloc异常,除非你用的是nothrow,这个就判断是否为NULL。
[解决办法]
有几种处理方法,对于throw new,catch bad_alloc异常;对于nothrow new,检查返回的指针是否为NULL;

上述两种new都可以通过set_new_handler在bad_alloc被抛出或者nothrow new返回NULL前对分配失败的情况进行处理。

而对于定位new重载,当构造产生异常时,可以通过与定位new的定位形参相对应的定位delete由编译器自动释放资源。
[解决办法]
effective c++描述了这个问题, nothrow尽量不要用了.

代码风格大致两种:
1, 异常 
2, 忽略异常(可以看谷歌编码规范)

异常在构造函数里抛出, 编译器会保证调用operator delete, 但不会调用析构函数, 所以一定要处理好在构造函数里已经初始化过的资源,考虑异常安全,多使用raii解决此类问题。

热点排行