2011-02-15 65 views
7

今天有人问我关于C++的智能指针,我无法找到关于它的有用的信息..有人可以用简单的英语解释智能指针吗?

请,可有人告诉: 什么是智能指针? 你什么时候需要它? 智能指针实际上有用吗?

谢谢!

+0

就像在boost智能指针一样? http://www.boost.org/doc/libs/1_45_0/libs/smart_ptr/smart_ptr.htm – mkb 2011-02-15 14:57:49

+0

我希望我们能够假设对“常规”指针的认识和理解? – delnan 2011-02-15 15:01:48

+0

delnan,是:) ___ – VextoR 2011-02-15 15:05:41

回答

6

首先,智能指针帮助您:当抛出异常

  • ,防止泄漏。当抛出一个异常时,你不希望在try块中早些分配的任何对象被泄漏。通过将它们包装在智能指针中,当try块被退出时它们将被销毁,这些对象将被正确销毁。
  • 通过对所有者进行对象引用来管理生命周期(即,最后一个销毁引用特定对象的智能指针实际上释放对象)。这在松散耦合的场景中特别有用,因为对象的用户彼此不知道对象何时应该销毁,因此不清楚该对象何时应该销毁。

,其中智能指针是有用的一个很好的例子:

指针的对象的载体。通过 使其成为共享指针的向量,例如, ,当 向量被销毁和/或对象被移除时,将自动释放对象 。这使对象生命周期管理自动化,并帮助容器的用户避免内存泄漏。

0

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

+0

我不确定智能指针是否必须负责分配内存。 – Nick 2011-02-15 15:13:24

0

智能指针本质上是管理在堆上分配的对象上分配的内存。

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

3

从升压智能指针(smart_ptr)LIB摘录:

智能指针是存储 指针动态分配 (堆)的对象的对象。它们的行为很像0​​内置的C++指针,只不过它们会自动删除在适当的时间点指向的对象 。 智能指针在异常情况下特别有用 ,因为它们确保正确销毁动态分配的对象。他们 也可以用来跟踪 动态分配的对象共享 由多个所有者。

在概念上,智能指针被看作 作为拥有指向的对象,并且因此 负责该 对象的删除时不再需要它。

1

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

1

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

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

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

0

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

相关问题