当前位置:  开发笔记 > 编程语言 > 正文

为什么std :: shared_ptr dereference没有抛出空指针异常(或类似)?

如何解决《为什么std::shared_ptrdereference没有抛出空指针异常(或类似)?》经验,为你挑选了2个好方法。

例外是C++的一个重要部分,使用它的原因之一(我知道有许多,更重要,其他原因)是避免不必要的检查,用大量if语句混淆代码(也许这是一个不正确的假设?) .

所以现在我很好奇为什么std::shared_ptr::operator*std::shared_ptr::operator->不扔一个null_ptr_exception或类似?



1> James Adkiso..:

我的理解是,智能指针类的外观和行为与原始指针相似.鉴于这个指导性设计原则,理想情况下遗留代码可以简单地使用等效的所有权语义替换原始指针与智能指针的使用,并且代码将完全像以前一样工作.

因此,更改解除引用智能指针的行为不应该执行任何其他检查或抛出异常(即,因为原始指针不会以这种方式运行).

向标准添加智能指针的提议表明了此设计决策(向图书馆技术报告添加通用智能指针的提案):

III.设计决策

A.一般原则

    "尽可能接近原始指针,但没有更接近"



2> Tony Delroy..:

如果需要每个解除引用共享指针以检查nullptr并有条件地抛出异常,那么可能会有大量冗余检查,代码膨胀和开销.当然 - 优化者可能会消除其中的一部分,但仍然......相反,程序员预计会在许多解除引用之前检查一次.


@Samaursa:任何人都可以轻松地将指针包装在自己的代码中添加检查,但如果它被烘焙,你就永远无法获得速度.人们也希望人们可以从原始指针使用迁移到'unique_ptr`,因为他们知道没有降低性能的风险(好吧,他们应该关注他们的实现一次,但之后)......节省了大量的性能分析这样的变化.让我们说`unique_ptr`确实`断言`......任何想要让他们的程序不被停止的人都必须自己检查`nullptr`并抛出,所以有双重检查.
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有