【发布时间】:2011-02-15 14:56:41
【问题描述】:
今天有人问我关于 C++ 中的智能指针,我找不到任何有用的信息。
请,有人可以告诉: 什么是智能指针? 你什么时候需要它? 你有任何智能指针真正有用的例子吗?
谢谢!
【问题讨论】:
-
我希望我们能够假设知识和理解“常规”指针?
标签: c++ smart-pointers
今天有人问我关于 C++ 中的智能指针,我找不到任何有用的信息。
请,有人可以告诉: 什么是智能指针? 你什么时候需要它? 你有任何智能指针真正有用的例子吗?
谢谢!
【问题讨论】:
标签: c++ smart-pointers
智能指针主要帮助您:
智能指针有用的一个很好的例子:
指向对象的指针向量。经过 使其成为共享指针的向量, 例如,对象将 自动被释放时 矢量被破坏和/或对象是 删除。这可以自动化对象生命周期管理,并帮助容器用户避免内存泄漏。
【讨论】:
摘自 Boost Smart Pointers (smart_ptr) 库:
智能指针是存储对象 指向动态分配的指针 (堆)对象。他们的行为很像 内置 C++ 指针,除了它们 自动删除对象 在适当的时候指出。 智能指针特别有用 面对例外,因为他们 确保妥善销毁 动态分配的对象。他们 也可用于跟踪 动态分配的对象共享 由多个所有者。
从概念上讲,可以看到智能指针 拥有指向的对象,并且 因此负责删除 不再需要的对象。
【讨论】:
智能指针通过跟踪有多少引用指向内存来处理自己的内存管理。一旦有 0 个引用,它就会为您删除内存。使内存管理更容易。
【讨论】:
智能指针一般是指行为类似于指针的类。您可以使用该类来存储指向您分配的内存的指针,并通过该指针访问数据。
优点是,当在函数和方法中使用时,智能指针可以在变量超出范围时自动释放内存。否则,当函数无法释放所有分配的内存时,这是内存泄漏的主要机会。
例如,查看http://msdn.microsoft.com/en-us/library/txda4x5t(VS.80).aspx。
【讨论】:
智能指针是一个为它所指向的事物动态分配内存的对象,当智能指针超出范围时,它会自动为它所指向的事物释放内存。当您想要在超出范围时释放某些东西,但它太大而无法放入堆栈(或有其他问题导致无法放入堆栈)时,它很有用。
【讨论】:
智能指针本质上管理在堆上分配的内存和在堆栈上分配的对象。
因为在堆栈上分配的对象具有固定的生命周期(即在它们被声明的范围内),堆内存的释放是确定性的并且保证会发生。
【讨论】:
智能指针基本上是执行类似于指针功能的对象 它们用于减少分配和释放时间。对于 C++,一个常见的例子是 auto_ptr
【讨论】: