今天我被问到C ++中的智能指针,我无法找到有关它的任何有用信息..
请有人告诉: 什么是智能指针? 你什么时候需要它? 你有任何智能指针实际有用的例子吗?
谢谢!
答案 0 :(得分:6)
智能指针主要帮助您:
智能指针有用的一个很好的例子:
指向对象的指针向量。通过 使它成为共享指针的向量, 例如,对象会 自动被取消分配时 矢量被破坏和/或物体 除去。这样可以自动执行对象生存期管理,并帮助容器用户避免内存泄漏。
答案 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