是什么让smartpointers比普通指针更好?

时间:2009-10-03 21:01:04

标签: c++ pointers

是什么让smartpointers比普通指针更好?

7 个答案:

答案 0 :(得分:11)

他们简化了资源管理的问题。一旦您将资源保存在智能指针中,当他们使用RAII技术超出范围时,他们将为您释放内存。

这有两个主要优点:代码更安全(更不容易出现资源泄漏),编程也更容易,因为您不需要记住代码的每个部分是否必须手动释放您持有的资源。

答案 1 :(得分:7)

主要优点是当指针超出范围时,智能指针指向的内存将自动释放。使用常规指针,您必须自己管理内存。

答案 2 :(得分:7)

原始指针不会获取它指向的资源的所有权。当指针超出范围时,它指向的对象不受影响。通常,您需要某种所有权语义,当指针超出范围时,它指向的对象应该被删除,或者至少被通知指向它的指针少一个。

这就是智能指针的作用。

shared_ptr实现引用计数,这样当所有指向对象的指针都被销毁时,对象就会被删除。

其他人,例如scoped_ptrunique_ptrauto_ptr实施各种形式的独占所有权。当scoped_ptr被销毁时,它会删除它指向的对象。

答案 3 :(得分:5)

更少的内存泄漏。也许Scott Meyers可以让你更清楚:

  1. Effective C++
  2. More Effective C++

答案 4 :(得分:3)

自动引用计数和释放。

答案 5 :(得分:2)

虽然在实践中同意其他答案,但我只是想说原则上没有什么能使智能指针更好,除非它们恰好适用于您的应用程序。也就是说,如果不需要智能指针,那就更好了。

如果您正在谈论的智能指针是std :: auto_ptr,那么它可能比简单的指针差得多。但这不是一个智能指针问题,而是分配问题的语义。

也就是说,智能指针通常很有用 - 甚至是可怕的auto_ptr - 尤其是(如上所述)WRT异常安全。

答案 6 :(得分:1)

看看:

Smart Pointers