- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 C++11 和 boost 中,智能指针都可以为 nullptr。我想知道为什么。这意味着每次从不受控制的客户端代码将智能指针传递给接口(interface)方法时,都必须检查智能指针是否为 nullptr。显然,这样的检查是在运行时执行的。
如果智能指针只能通过 make_shared 或 make_unique 创建并且不能重置或重新分配给 nullptr 或原始指针怎么办?这种方法可以确保指针在编译时不为 nullptr。
例如,在 Java 中我们总是必须检查对象是否不为 null(坏)。但在 Swift 中,我们可以明确地确保参数(或变量)在编译时不为 null(很好)。
更新:嗯,非常感谢您的回答和评论。我有主意了。但是是否有任何流行的库支持非空编译时保证以及所有权,也许是智能指针包装器?
最佳答案
std
智能指针存在的原因只有一个——实现所有权的概念。它们的责任是明确定义谁拥有指针对象(即谁以及如何确保其安全)破坏)。
std 的大部分实际上是由低级基本构建 block 组成的。虽然它们可以直接在客户端代码中使用,但它们不应该是一个包罗万象的解决方案。它们为您提供单一用途的工具,您可以混合搭配这些工具来创建您需要的东西。
std
智能指针实际上是“原始指针 + 所有权”。原始指针可以为空并且可以重新定位,所以 std 智能指针也可以。没有什么可以阻止您创建自己的“std
智能指针+非空”类并在代码中使用它们。
另一方面,空智能指针有非常有效的用例。如果 std 智能指针强制执行非空性,并且您需要支持空的智能指针,那么实现它就会困难得多。当您只能通过添加到原始类来完成时,添加有效性约束比删除它更容易。
关于c++11 - 为什么 C++ 智能指针如此不受限制,即可以重新分配或重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897669/
我确信一定有什么东西可以为我做到这一点。 我有一个显示项目列表的网络用户界面。如果你点击一个项目,会发生两件事: UI 将使用立即可用的信息进行更新,然后将发出异步请求以获取更多信息。完成后,它将更新
我是一名优秀的程序员,十分优秀!