首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >智能指针作为编程标准的使用?

智能指针作为编程标准的使用?
EN

Stack Overflow用户
提问于 2011-05-26 16:47:05
回答 9查看 2.5K关注 0票数 14

我越来越多地听说,我应该使用智能指针,而不是裸指针,尽管我已经实现了有效的内存泄漏系统。

请问关于使用智能指针的正确的编程方法是什么?即使我检查分配的内存块上的内存泄漏,也应该使用它们吗?还是我说了算吗?如果我不使用它们,这能被认为是编程上的弱点吗?

如果强烈建议使用智能指针(例如: std::auto_ptr),是否应该使用它们而不是每个裸指针

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-05-26 16:49:54

您应该使用RAII来处理所有资源分配。

智能指针只是该规则的一个常见特例。

智能指针不仅仅是shared_ptr。有不同的智能指针具有不同的所有权语义。用一个适合你需要的。(主要是scoped_ptrshared_ptrweak_ptrauto_ptr/unique_ptr (在可用的情况下更喜欢后者)。根据编译器的不同,它们可能作为TR1的一部分在标准库中可用,或者根本没有,在这种情况下,您可以通过Boost库获得它们。

是的,你绝对应该使用这些。它不需要花费任何费用(如果正确的话,您将失去零性能),并且它会给您带来很多好处(内存和其他资源会自动释放,您不需要记住手动处理它,并且使用该资源的代码变得更短、更简洁)。

注意,并非每个指针使用都代表某种类型的资源所有权,因此并非所有原始指针使用都是错误的。如果您只需要指向其他人拥有的对象,则原始指针是非常合适的。但是,如果您拥有这个对象,那么您应该通过给类本身RAII语义,或者通过将它封装在一个智能指针中,来获得它的适当所有权。

票数 22
EN

Stack Overflow用户

发布于 2011-05-26 16:54:32

不能盲目地用std::auto_ptr代替每个原始指针。特别是,auto_ptr在转让时转移所有权,这对于某些目的是很好的,但对其他目的则肯定不是这样。

有一个真正的原因是有多种智能指针(例如,shared_ptr、weak_ptr、auto_ptr/unique_ptr等)。每个人都有不同的目的。“原始”指针的一个主要缺点是它有许多不同的用途(并且具有这种通用性,很大程度上是因为它对任何一个目的几乎没有什么帮助)。聪明的指针往往更专业,这意味着他们可以更聪明地做好一件事情,但也意味着你必须为这份工作选择正确的一件事,否则它最终会做错的事情。

票数 10
EN

Stack Overflow用户

发布于 2011-05-26 16:52:33

即使我检查分配的内存块上的内存泄漏,也应该使用吗?

,YES,

智能指针的全部目的是,它帮助您实现https://stackoverflow.com/questions/395123/raii-and-smart-pointers-in-c,它基本上让资源本身承担其解除分配的责任,并且资源不必依赖于您显式地记住来释放它。

如果我不使用它们,这能被认为是编程的弱点吗?

NO,

如果您不使用智能指针(RAII),那么单独显式地管理资源并不是一个弱点,而是一个不便或不必要的麻烦。实现RAII的智能指针的目的是提供高效和轻松的处理资源的方法,如果不使用它,您就不会使用它。强烈建议将其完全用于它提供的众多优势

如果强烈建议使用智能指针(ex:std::auto_ptr),是否应该使用它们而不是每个裸指针?

,YES,

您应该尽可能地使用智能指针,因为使用它们没有缺点,而且使用它们有很多优点。

但是不要使用auto_ptr,因为它已经被废弃了!!根据需求,您还可以使用其他各种智能指针。您可以参考上面的链接来了解更多关于它们的信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6142142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档