有那么多关于智能指针的文献,我已经尽可能多地阅读了。我只想要一个简单的答案。
我在3D渲染器引擎中使用了原始指针,现在我必须在渲染器之间共享一些小部件,所以智能指针来了。请指导我是否应该用智能指针(std::shared_ptr)更新我的整个软件/库?那件案子的缺点是什么?我知道优点,只是想知道有什么坏处吗?在从原始指针到智能指针的转换过程中,我应该考虑哪些事情是重要的?请说得具体一点?谢谢。
发布于 2015-06-28 09:13:36
一般来说,它们是一个有用的工具,但并不是所有的任务都适合于单个工具。话虽如此,以下是一些你应该考虑的事情:
std::shared_ptr
。还有std::unique_ptr
,也可以查看std::make_shared
、std::make_unique
(C++14)和std::enable_shared_from_this
作为最小值。std::shared_ptr
作为参数传递时,请确保不添加同步的、多余的引用计数操作,例如,使用const std::shared_ptr<...>&
。.get()
。发布于 2015-06-28 17:55:16
关于智能指针的优点,还有其他人已经说过,我建议在适当的情况下在应用程序中使用它们。
当谈到库的API时,我会说:它取决于。如果以源形式分发库,则可以在API中使用智能指针,用户可能会从中受益。但是,如果要将库作为DLL分发,则智能指针不是正确的工具。这是因为它们被定义为模板,模板类不能作为DLL分发。库的用户将被迫使用与生成DLL完全相同的编译器和模板库--这可能不是您想要的。因此,对于DLL的API,在使用智能指针之前我会三思而后行。
https://stackoverflow.com/questions/31096378
复制相似问题