.net c++/cli为我们提供了垃圾收集器,它为我们提供了内存管理,所以为什么我们要对对象使用delete操作符呢?

.net c++/cli为我们提供了垃圾收集器,它为我们提供了内存管理,所以为什么我们要对对象使用delete操作符呢?,.net,memory-management,garbage-collection,c++-cli,.net,Memory Management,Garbage Collection,C++ Cli,我的问题是为什么我们对对象使用delete操作符? net不是为我们提供了它吗 此外,我还编写了一个带有两个按钮的小程序。在第一个按钮中,我创建了一个对象,在第二个按钮中,我删除了它。程序运行时,我查看了windows process explorer,但当我单击第二个按钮时,内存并未减少。垃圾回收器有自己的内存回收算法,称为非确定性处理,可以通过代码> GC .cCub()/代码> < /P> > P>立即删除。C++中的删除操作符不做与C++中的操作符相同的操作。实际上,内存是由垃圾收集器管

我的问题是为什么我们对对象使用delete操作符? net不是为我们提供了它吗


此外,我还编写了一个带有两个按钮的小程序。在第一个按钮中,我创建了一个对象,在第二个按钮中,我删除了它。程序运行时,我查看了windows process explorer,但当我单击第二个按钮时,内存并未减少。垃圾回收器有自己的内存回收算法,称为非确定性处理,可以通过代码> GC .cCub()/代码> < /P> > P>立即删除。C++中的删除操作符不做与C++中的操作符相同的操作。实际上,内存是由垃圾收集器管理的,您不能显式地释放它。但对象可以使用内存以外的其他资源,最典型的是操作系统句柄或指向非托管堆内存的指针。垃圾收集器也会释放这些垃圾,但这需要时间。如果资源很昂贵,那么当您不再使用它时,您会希望释放它,而不是等待终结器来处理它。这在.NET中称为处理


对按钮对象使用“删除”会立即导致按钮消失。按钮控件的窗口是这些操作系统资源之一。这通常不会减少内存使用。句柄计数下降。

我没有使用C++/CLI,但我认为在对象上使用
delete
实际上并没有释放内存,而是告诉内存管理器内存可以回收。不应该调用GC.Collect()(或者仅在非常特殊的情况下)@ken2k我知道,我只是想让OP意识到这种方法的存在我相信你知道,我只是想指出这种方法在大多数情况下不应该使用;)值得注意的是,调用
delete obj编译为
IDisposable^disp=dynamic_cast(obj);如果(disp!=nullptr){disp->Dispose();}
。它是对Dispose方法的调用,如果该对象上存在,则仅此而已。