2

我正在尝试学习 C++ 中的最佳习惯和实践,尤其是围绕内存管理。在我的 iOS 应用程序中使用 ARC、Java 中的内置 GC 以及其他一些启用了 GC 的语言,我在这方面被宠坏了。

我了解您使用deletedelete[]解构指针。我的问题是,您如何delete处理整数或基本数据类型的其他变量?

我的第一个想法是,既然delete似乎只适用于指针,我可以这样做:

int intToDelete = 6;
delete &intToDelete;

所以基本上,你可以在内存中创建一个指向整数的指针,并使用该指针删除整数吗?

4

3 回答 3

11

delete并且delete[]只能与分别用newor显式分配的指针一起使用。new[]特别是,每次使用时new,都应该有对应的delete. 同样,每个都new[]需要一个对应的delete[]. 您永远不应该将其中任何一个与您没有明确分配内存的变量一起使用。编译器负责所有非指针变量的内存分配(和释放)。

于 2012-12-07T02:17:35.780 回答
1

delete用于释放new操作员分配的堆中的内存,delete[]new[]. 您不能使用delete释放未分配的new指针,甚至是来自 的指针malloc

于 2012-12-07T02:24:31.990 回答
0

本地对象会自动清理自己。这是该语言最有用的特性之一,因为它也可以通过 RAII 扩展以覆盖非本地对象。具体来说,使用delete是一个巨大的危险信号,表明您没有使用正确的自动清理工具,delete[]甚至更糟。

正确使用构造和销毁语义对于编写良好的 C++ 代码至关重要。如果您手动管理内存,那么您做错了,除非您有一个摇摇欲坠的旧编译器一些非常独特的情况(我从未见过任何实际证明这一点的例子)。

于 2012-12-07T02:20:11.550 回答