微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实例中为NULL

如何解决实例中为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 举报,一经查实,本站将立刻删除。