Geo*_*tov 4 boost smart-pointers c++11
在C++ 11和boost中,智能指针可以是nullptr.我想知道为什么.这意味着每次从不受控制的客户端代码传递给接口方法时,必须检查智能指针是否为nullptr.显然,这种检查是在运行时执行的.
如果有智能指针只能通过make_shared或make_unique创建并且无法重置或重新分配给nullptr或原始指针怎么办?此方法允许确保指针在编译时不是nullptr .
例如,在Java中,我们总是必须检查对象是否为空(坏).但是在Swift中,我们可以明确地确保参数(或变量)在编译时不是空的(好的).
UPD:嗯,非常感谢您的回答和评论.我明白了.但是有没有任何流行的库支持非归零编译时保证以及所有权,也许是智能指针包装器?
std存在智能指针的原因之一是实现所有权的概念.他们的责任是明确界定谁拥有指针(即谁以及如何确保其安全销毁).
大部分std都是由低级基本构建块组成的.虽然它们可以直接在客户端代码中使用,但它们不应该是一个包罗万象的解决方案.它们为您提供单一用途的工具,您可以将它们混合搭配以创建您需要的东西.
该std智能指针eactly"原始指针+所有权." 原始指针可以为null并且可以重新设置,因此std智能指针也可以.没有什么能阻止您创建自己的" std智能指针+非nullity"类并在代码中使用它们.
另一方面,null智能指针有非常有效的用例.如果std智能指针强制执行非null,并且您需要支持null的智能指针,那么实现它会更加困难.添加有效性约束比删除它更容易,只能通过添加到原始类来实现.