假设我正在实现一个包装类 Foo 在C++/CLI中。当然,如果我要创建一个dtor( Foo::~Foo ,它将成为 IDisposable 实施。
Foo
Foo::~Foo
IDisposable
IDisposable通常用于允许立即释放某些“稀缺”资源:GDI资源、文件句柄等。但是,如果我的IDisposable只是释放内存(例如,它只是执行 free 或 delete )不应该在常规终结器中完成吗?( Foo::!Foo ),无论何时发生?
free
delete
Foo::!Foo
我的意思是,我们可以接受这样的想法,.net可以在任何时候释放内存,那么为什么要对本质上只是释放内存的东西进行细粒度的控制呢?
就我个人而言,我认为尽早释放记忆是一个好的原则。 当然,GC最终会介入并释放它。但是gc使用一个线程来调用所有终结器,如果要调用的终结器太多,则可能会对性能造成不良影响。
在桌面应用程序中,你可能感觉不到与单一客户端有多大区别,但想象一下服务器应用程序中有成百上千个客户端。