有人能用简单的英语解释智能指针吗?

时间:2011-02-15 14:56:42

标签: c++ smart-pointers

今天我被问到C ++中的智能指针,我无法找到有关它的任何有用信息..

请有人告诉: 什么是智能指针? 你什么时候需要它? 你有任何智能指针实际有用的例子吗?

谢谢!

7 个答案:

答案 0 :(得分:6)

智能指针主要帮助您:

  • 抛出异常时避免泄漏。抛出异常时,您不希望泄漏try块中先前分配的任何对象。通过将它们包装在智能指针中,当退出try块时它们将被销毁,这些对象将被正确销毁。
  • 通过引用计数所有者来管理对象的生命周期(即,最后一个销毁其引用特定对象的智能指针实际上解除对象的对象)。这在松散耦合的场景中特别有用,因为它不清楚对象的销毁时间,因为对象的用户彼此不了解。

智能指针有用的一个很好的例子:

  

指向对象的指针向量。通过   使它成为共享指针的向量,   例如,对象会   自动被取消分配时   矢量被破坏和/或物体   除去。这样可以自动执行对象生存期管理,并帮助容器用户避免内存泄漏。

答案 1 :(得分:3)

摘自Boost Smart Pointers(smart_ptr)lib:

  

智能指针是存储的对象   指向动态分配的指针   (堆)对象。他们表现得很像   内置的C ++指针,除了它们   自动删除对象   在适当的时候指出。   智能指针特别有用   面对例外,他们   确保适当的破坏   动态分配的对象。他们   也可用于跟踪   动态分配的对象共享   由多个所有者。

     

从概念上讲,可以看到智能指针   拥有指向的对象,和   因此负责删除   不再需要的对象。

答案 2 :(得分:1)

智能指针通过跟踪指向内存的引用数量来处理自己的内存管理。一旦有0个引用,它会为您删除内存。使内存管理更容易。

答案 3 :(得分:1)

智能指针通用是指一个行为类似于指针的类。您可以使用该类存储指向您分配的内存的指针,并通过指针访问数据。

优点是,当在函数和方法中使用时,一旦变量超出范围,就可以使智能指针自动解除分配内存。否则,当函数无法释放所有已分配的内存时,这是内存泄漏的主要机会。

例如,请查看http://msdn.microsoft.com/en-us/library/txda4x5t(VS.80).aspx

答案 4 :(得分:0)

智能指针是一个动态为其指向的事物分配内存的对象,当智能指针超出范围时,它会自动为其指向的内容释放内存。当你想要的东西在超出范围时被解除分配时会很有用,但这个东西太大而无法放在堆栈上(或者有其它问题阻止它被放到堆栈上)。

答案 5 :(得分:0)

智能指针实质上管理堆上分配的内存,并在堆栈上分配对象。

因为在堆栈上分配的对象具有固定的生命周期(即在声明它们的范围内),所以堆内存的释放是确定性的并且保证会发生。

答案 6 :(得分:0)

智能指针基本上是执行与指针类似的功能的对象 它们用于减少分配和释放时间。对于C ++,一个常见的例子是auto_ptr