2012-09-15 33 views
1

如果我使用“new”为函数中的本地字符数组分配新内存,是否有必要在函数返回之前使用delete?当变量是本地时是否需要删除?

函数返回后不会自动删除它吗?

+1

考虑添加一些支持代码,因为它比“如果我要分配......使用新的......”更容易一眼看出。我也希望有人说一些关于变量和对象的东西。 – 2012-09-16 00:04:38

+1

无论如何,你几乎不应该使用'new'作为局部变量。改用一个值对象。 –

回答

6

是的,这是必要的:如果你在动态存储上分配了newnew[]的东西,编译器不知道你没有计划在函数返回后传递分配的对象,所以你有责任请致电delete(或delete[])以释放您已分配的对象。

您可以使用unique_ptr<T>来避免显式地调用delete,但是您的代表将会由unique_ptr<T>的析构函数进行调用。

+0

考虑到OP即将分配一个动态数组*,似乎也提到'unique_ptr ',它调用正确的'delete []'来销毁数组。 –

+0

@KerrekSB好点,谢谢! – dasblinkenlight

3

是的,分配new的变量不是当功能返回时自动释放,仍然需要删除。

1

是的,是的,是的,是的,是的。除非您使用的智能指针如auto_ptrboost::shared_ptr,否则您必须使用delete来取消分配内存。

因为new在堆上分配,不依赖于当前堆栈帧,所以当C++销毁当前堆栈帧时不分配内存。如果您使用new,则必须始终使用delete。期。

+3

'auto_ptr'已被弃用(但仍适用于此用例),'shared_ptr'对于这种情况是过分的。 'unique_ptr'或'boost :: scoped_ptr'更适合这个目的。 – Praetorian

+0

@Prætorian:好的建议。我知道'auro_ptr'已被弃用,我只想要一些智能指针的例子。 – Linuxios

相关问题