gpt4 book ai didi

c++11 - 为什么 C++ 智能指针如此不受限制,即可以重新分配或重置?

转载 作者:行者123 更新时间:2023-12-02 22:17:36 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com