[英]Should I use smart pointers for my application and library?
关于智能指针的文献太多,我已经读了很多。 我只想要一个简单的答案。
我在3D渲染器引擎中使用了原始指针,现在我必须在渲染器之间共享一些小部件,因此智能指针就来了。 请指导我是否应该使用智能指针(std :: shared_ptr)更新我的整个软件/库? 在这种情况下会有什么弊端? 我知道优点,只是想知道有什么缺点? 在从原始指针到智能指针的转换过程中,我应该考虑哪些重要的事情? 请具体吗? 谢谢。
通常,它们是有用的工具,但并非所有任务都适合单个工具。 也就是说,您应该考虑以下几件事:
std::shared_ptr
。 还有std::unique_ptr
,也std::make_unique
研究std::make_shared
, std::make_unique
(C ++ 14)和std::enable_shared_from_this
。 std::shared_ptr
作为参数传递时,请确保不要添加同步的多余引用计数操作,例如,使用const std::shared_ptr<...>&
。 .get()
将原始指针传递到这些API。 关于智能指针的优点,有很多要说的,正如其他人已经说过的,我建议在适当的情况下在您的应用程序中使用它们。
关于库的API,我会说:这取决于。 如果您以源代码形式分发库,那么可以,您可以在API中使用智能指针,并且用户可以从中受益。 但是,如果您想将库作为DLL分发,则智能指针不是正确的工具。 这是因为它们被定义为模板,并且模板类不能作为DLL分发。 库的用户将被迫使用与生成DLL完全相同的编译器和模板库,而这可能不是您想要的。 因此,对于DLL的API,在使用智能指针之前,我会三思而后行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.