回答
是的,这是必要的:如果你在动态存储上分配了new
或new[]
的东西,编译器不知道你没有计划在函数返回后传递分配的对象,所以你有责任请致电delete
(或delete[]
)以释放您已分配的对象。
您可以使用unique_ptr<T>
来避免显式地调用delete
,但是您的代表将会由unique_ptr<T>
的析构函数进行调用。
考虑到OP即将分配一个动态数组*,似乎也提到'unique_ptr
@KerrekSB好点,谢谢! – dasblinkenlight
是的,分配new
的变量不是当功能返回时自动释放,仍然需要删除。
是的,是的,是的,是的,是的。除非您使用的智能指针如auto_ptr
或boost::shared_ptr
,否则您必须使用delete
来取消分配内存。
因为new
在堆上分配,不依赖于当前堆栈帧,所以当C++销毁当前堆栈帧时不分配内存。如果您使用new
,则必须始终使用delete
。期。
'auto_ptr'已被弃用(但仍适用于此用例),'shared_ptr'对于这种情况是过分的。 'unique_ptr'或'boost :: scoped_ptr'更适合这个目的。 – Praetorian
@Prætorian:好的建议。我知道'auro_ptr'已被弃用,我只想要一些智能指针的例子。 – Linuxios
- 1. 是否需要删除静态向量?
- 2. Snow结束后是否需要删除导出的变量
- 3. 是否需要删除指定的变量?
- 4. 当数组缩小时,是否需要删除元素?
- 5. 是否等待()需要同步本地变量
- 6. 字符串池是否需要本地变量?
- 7. 本地时间内存是否需要解除分配?
- 8. 当范围被销毁时,是否需要“解除”范围变量?
- 9. 我是否需要删除此对象?
- 10. 我是否需要删除对象?
- 11. 是否需要局部变量?
- 12. pthread_once_t变量是否需要互斥锁?
- 13. 当应用程序在背景上时,android是否清除本地变量
- 14. 我是否需要本地安装MySQL?
- 15. 状态monad是否需要/有用可变(本地)变量(如Scala)的语言?
- 16. 当我删除父项本身时,是否需要删除DOM元素的所有子项?
- 17. 当我更改其他会话变量时,是否需要删除Coldfusion中的cookie
- 18. 用户注销后我们是否需要删除会话变量?
- 19. 我是否需要删除JavaScript中的回调中使用的局部变量?
- 20. 是否有一个工具来删除不需要的,未使用的变量
- 21. 是否需要检查js变量是否为d3选择?
- 22. 设置属性值时是否需要使用临时变量?
- 23. 是否需要变动?
- 24. 当我删除元素时,是否需要在jQuery中分离事件
- 25. 我是否需要删除临时表上的索引?
- 26. 处理对象时是否需要删除事件?
- 27. NSUserDefaults是否删除临时不需要的密钥?
- 28. 安装WAMP是否会删除当前的本地数据库?
- 29. 是否总是需要删除MapReduce中的重复项?
- 30. 每当我做出改变时,我是否需要辞职APK?
考虑添加一些支持代码,因为它比“如果我要分配......使用新的......”更容易一眼看出。我也希望有人说一些关于变量和对象的东西。 – 2012-09-16 00:04:38
无论如何,你几乎不应该使用'new'作为局部变量。改用一个值对象。 –