我正在努力学习C ++中的最佳习惯和实践,特别是围绕内存管理。通过在我的iOS应用程序中使用ARC,以及使用Java中的内置GC以及其他一些启用了GC的语言,我在这方面被宠坏了。
我了解您使用delete
或delete[]
来解构指针。我的问题是,你如何delete
整数或基本数据类型的其他变量?
我的第一个想法是,由于delete
似乎只能使用指针,我可以这样做:
int intToDelete = 6;
delete &intToDelete;
所以基本上,你可以在内存中创建一个指向整数的指针,并使用该指针删除整数吗?
答案 0 :(得分:10)
delete
和delete[]
只应与您分别使用new
或new[]
明确分配的指针一起使用。特别是,每次使用new
时,都应该有相应的delete
。同样,每个new[]
都需要相应的delete[]
。您永远不应该使用其中任何一个未明确分配内存的变量。编译器负责所有非指针变量的内存分配(和释放)。
答案 1 :(得分:1)
delete
用于释放由new
运算符分配的堆中的内存,delete[]
是new[]
的对应内容。
您无法使用delete
释放未由new
分配的指针,即使是来自malloc
的指针。
答案 2 :(得分:0)
本地对象自动清理自己。这是该语言最有用的功能之一,因为它也可以通过RAII扩展到非本地对象。具体来说,使用delete
是一个大量红旗,你没有使用正确的自动清理工具,delete[]
甚至更糟。
正确使用构造和销毁语义对于编写良好的C ++代码至关重要。如果你是手动管理内存,你做错了,除非你有一个狡猾的旧编译器或一些非常独特的情况(我从来没有见过任何实际证明这一点的例子) 。