我有一个主要的对象。它拥有很多包含其他对象的数组。我想知道,当我删除主对象时,所有的内存都会被释放(主对象,数组和数组的对象(元素))?例如:当我删除一个对象时,被删除的对象是否也被删除了?
Fruit^ my_fruit = gcnew Fruit;
Apple^ first_apple = gcnew Apple;
Apple^ second_apple = gcnew Apple;
my_fruit->AppleList->Add(first_apple);
my_fruit->AppleList->Add(second_apple);
// some operations
delete my_fruit; // **is it enough to avoid memory leak, is it necessary to delete first and second apple objects?**
谢谢,这是有益的..我真的需要了解内存管理。 – user983924 2012-02-07 08:27:27
这是不正确的。删除不会释放用gcnew创建的这些托管对象的内存。除非这些类实现IDisposable,否则不需要删除调用。除非AppleList实现了IDisposable(即它具有析构函数),否则Fruit不需要析构函数。 – 2012-02-07 14:29:57
啊,是的,感到困惑。由于我们正在讨论gcnew,它由垃圾收集器处理。另一方面,如果你使用新的代码,你需要在内存中释放代码来防止内存泄漏。 – syclee 2012-02-07 23:31:32