如何解决实例中为NULL
| 编写C ++时,假设下面的代码行:Object* obj = new Object();
如果此行既编译又不会引起异常或任何其他可见的
运行时问题,执行此行后obj是否可以为NULL?
解决方法
不,
obj
不能是NULL
。
如果new
失败,它将抛出std::bad_alloc
异常。如果未引发任何异常,则保证“ 1”指向完整初始化的“ 6”实例。
new
的变体不会引发异常
Object *obj = new(nothrow) Object();
在这种情况下,如果new
失败,则obj
将是NULL
,并且不会抛出std::bad_alloc
异常(尽管Object
的构造函数显然仍然可以抛出异常)。
在某些较旧的编译器上,new
可能不会引发异常,而是返回NULL
,但这不是符合标准的行为。
如果您重载了operator new
,则其行为可能会因您的实现而有所不同。
, 不,您的确切行不能那样行。如果没有抛出异常,“ 1”将始终指向有效内存。但是,如果无法分配内存,则以下行将返回0
:
Object* obj = new (std::nothrow) Object();
, allocation3ѭ投掷std::bad_alloc
是分配不成功。因此,您应该捕获该异常。
如果要在new.
之后检查NULL
,则应使用nothrow new
, 不可以,除非您禁用了异常或使过载的“ 24”超出了标准功能(如果失败则抛出4),而不能做其他事情。
(我不确定禁用异常时,std::new
的行为如何,但是可以在此处进行有关此的讨论...)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。