【OpenHarmony】make_shared和make_unique失败时总会抛异常,和是否禁用异常无关
一、背景
在项目代码里面有很多这种判断:
handler_ = std::make_shared
if (handler_ == nullptr) {
USB_HILOGE(MODULE_USB_SERVICE, "Init failed due to create handler error");
return false;
}
对此不同人有不同看法:
有些人认为应该判空,防止后面使用handler_的时候对空指针解引用。有人认为,make_shared失败后会抛异常,且handler值是未定义的,判空实际无效。
二、探索
1、构造失败场景
思路
当前我们可以确定的是,new(nothrow),能够申请到内存,并且出错后会返回nullptr。所以可以使用new将内存耗尽(包括虚拟内存),
【OpenHarmony】make_shared和make_unique失败时总会抛异常,和是否禁用异常无关最先出现在Python成神之路。
共有 0 条评论