有很多关于智能指针的文献,我尽可能多地阅读。我只想要一个简单的答案。
我已经为我的3D渲染器引擎使用了原始指针,现在我必须在渲染器之间共享一些小部件,所以这里有智能指针。如果我用智能指针(std :: shared_ptr)更新我的整个软件/库,请指导我吗?那种情况下的缺点是什么?我知道专业人士,只是想知道有没有任何缺点?在从原始指针到智能指针的转换过程中,我应该考虑哪些重要事项?请具体一点?感谢。
答案 0 :(得分:3)
通常,它们是一个有用的工具,但并非所有任务都适用于单个工具。也就是说,这里有一些你应该考虑的事情:
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()
将原始指针传递给需要的API。答案 1 :(得分:1)
很多关于智能指针的优点的说法,正如其他人已经说过的,我会建议在适当的时候在你的应用程序中使用它们。
说到图书馆的API,我会说:这取决于。如果您要以源代码形式分发库,那么您可以在API中使用智能指针,并且您的用户可能会从中受益。但是,如果您希望将库分发为DLL,则智能指针不是正确的工具。这是因为它们被定义为模板,模板类不能作为DLL分发。您的库的用户将被迫使用与生成DLL时完全相同的编译器和模板库 - 这可能不是您想要的。因此,对于DLL的API,我会在使用智能指针之前三思而后行。