回答
首先,智能指针帮助您:当抛出异常
- ,防止泄漏。当抛出一个异常时,你不希望在try块中早些分配的任何对象被泄漏。通过将它们包装在智能指针中,当try块被退出时它们将被销毁,这些对象将被正确销毁。
- 通过对所有者进行对象引用来管理生命周期(即,最后一个销毁引用特定对象的智能指针实际上释放对象)。这在松散耦合的场景中特别有用,因为对象的用户彼此不知道对象何时应该销毁,因此不清楚该对象何时应该销毁。
,其中智能指针是有用的一个很好的例子:
指针的对象的载体。通过 使其成为共享指针的向量,例如, ,当 向量被销毁和/或对象被移除时,将自动释放对象 。这使对象生命周期管理自动化,并帮助容器的用户避免内存泄漏。
智能指针是一个为它所指向的对象动态分配内存的对象,当智能指针超出范围时,它会自动为它所指向的对象释放内存。当你想要某些在超出范围时被释放的东西时很有用,但是这太大而不能放在堆栈上(或者有其他问题阻止它被放到堆栈上)。
我不确定智能指针是否必须负责分配内存。 – Nick 2011-02-15 15:13:24
智能指针本质上是管理在堆上分配的对象上分配的内存。
因为在堆栈上分配的对象具有固定的生命周期(即在它们声明的范围内),释放堆内存是确定性的并且保证发生。
从升压智能指针(smart_ptr)LIB摘录:
智能指针是存储 指针动态分配 (堆)的对象的对象。它们的行为很像0内置的C++指针,只不过它们会自动删除在适当的时间点指向的对象 。 智能指针在异常情况下特别有用 ,因为它们确保正确销毁动态分配的对象。他们 也可以用来跟踪 动态分配的对象共享 由多个所有者。
在概念上,智能指针被看作 作为拥有指向的对象,并且因此 负责该 对象的删除时不再需要它。
智能指针通过跟踪有多少引用指向内存来处理它们自己的内存管理。一旦有0个引用,它就会为你删除内存。使内存管理更容易。
智能指针泛指泛指类似于指针的类。您可以使用该类来存储指向您分配的内存的指针,并通过指针访问数据。
优点是,当在函数和方法中使用时,智能指针可以在变量超出范围后自动释放内存。否则,当函数释放所有分配的内存时,这是内存泄漏的主要机会。
例如,检查出http://msdn.microsoft.com/en-us/library/txda4x5t(VS.80).aspx。
智能指针基本上是执行类似于指针 的函数的对象,它们用于减少分配和释放时间。对于C++来说,一个常见的例子是auto_ptr
- 1. 有人可以解释这个函数指针语法吗?
- 2. 有人可以解释C指针
- 3. 有人解释DSL语言创建的机制“简单英语”
- 4. 有人可以用简单的英语解释这个简短的getopts bash脚本吗? (UNIX)
- 5. 任何人都可以用英语向我解释这个吗?
- 6. 有人可以用英文解释下面的代码吗?
- 7. 有人可以解释吗?
- 8. 有人可以用简单的英语解释ConfigurationSection和ConfigurationElement之间的区别吗?
- 9. 有人可以用普通英语解释Twitter API的速率限制吗?
- 10. 有人可以用英文解释这个VBA宏代码吗?
- 11. 有人可以为我简单地解释MVC吗?
- 12. 有人可以简单地解释这个Java行吗?
- 13. 有人可以解释“解除空指针的警告”警告
- 14. 有人可以向我解释此MSDN代码的英文吗?
- 15. 在Windows终端的Ubuntu?任何人都可以用简单的英语为我解释'col'命令吗?
- 16. 有人可以用简单的语言解释一下javascript的数据绑定功能吗?
- 17. 有人可以解释iOS4的CMTime吗?
- 18. 简单的升压智能指针语法问题
- 19. char数组和指针 - 有人可以解释下面的输出吗?
- 20. 有人可以解释纯英语的ORA-29861错误及其可能的原因吗?
- 21. 有人可以解释这个通用语法吗?
- 22. 解释在简单的英语语言使用高阶函数
- 23. 有人可以解释这个任务,双指针和输出
- 24. 有人可以解释respond_to吗? :每?
- 25. 有人可以解释参数autovacuum_naptime吗?
- 26. 有人可以解释行结束吗?
- 27. 有人可以解释ContactsContracts吗?
- 28. 有人可以解释iFrames吗?
- 29. 有人可以解释WebKit吗?
- 30. 有人可以解释这一点吗?
就像在boost智能指针一样? http://www.boost.org/doc/libs/1_45_0/libs/smart_ptr/smart_ptr.htm – mkb 2011-02-15 14:57:49
我希望我们能够假设对“常规”指针的认识和理解? – delnan 2011-02-15 15:01:48
delnan,是:) ___ – VextoR 2011-02-15 15:05:41