这个问题似乎有点基本,但是除了性能之外,智能指针的缺点是什么呢?我应该总是把它们用于非性能关键代码吗?
编辑:我使用VisualStudio2013RC和C++11
发布于 2013-09-15 14:58:38
例如,对于unique_ptr,任何合理的优化编译器都不太可能降低性能。对于shared_ptr,您可能有一个额外的堆分配--这是您可以用make_shared解决的问题,而且还需要维护一个重新计数的成本,但是请考虑一下,如果您正在运行自己的跟踪或终身管理机制,您可能也要承担这种开销。有关此问题的更多讨论,请参见GotW #89。
关于“如果我总是使用它们”,Sean在“2013年谈话”( GoingNative 2013 talk C++调味料 )中阐述了这一点(以及一些微妙之处) --他的第三个目标是“没有原始指针”,他给出了一些例子。他一度提出,shared_ptr- to -non几乎等同于全局变量.值得一看。C++调味幻灯片是可用的,但我建议您看一看。
一般来说,每个智能指针都会有权衡,就像原始指针有权衡一样。这将取决于你评估情况和权衡,并作出选择。而且,现在似乎有足够的智能指针变体来匹配许多(如果不是大多数情况),特别是在C++11和C++14方面的改进。
发布于 2013-09-15 14:52:25
我总是使用智能指针来保存资源,即使“智能”指针可能没有那么聪明,例如,在使用std::unique_ptr<T>或std::unique_ptr<T[]>时。当使用指针来建模不拥有的链接时,或者在传递不拥有的指针时,我使用的是原始指针,因为它们是该作业的正确抽象,并且不干扰关于对象如何拥有的任何选择。
https://stackoverflow.com/questions/18813679
复制相似问题