【发布时间】:2014-09-24 15:11:50
【问题描述】:
在 C++ 中,我习惯于使用哨兵模式来确保在块或函数退出时正确释放获取的资源(例如,参见 here)。例如,我用它来抓取图形状态,然后我可以对该状态做任何我想做的事情,当哨兵对象(引用)超出范围时它会被放回。
现在我正在使用 C#,但同样的技巧不起作用,因为直到后来谁知道什么时候才会调用析构函数。
当对象的最后一个引用被释放时,是否有其他方法可以保证触发?还是我只需要记住调用一些 Restore() 或 Apply() 或 DoYourThing() 方法,然后再从我会使用哨兵的任何方法返回?
【问题讨论】:
-
“是否有其他方法可以保证在释放对象的最后一个引用时触发” 没有。:-(我也对此感到遗憾。.NET Dispose 模式是最好的替代品。
-
我假设你已经看过Implementing RAII in C#(甚至可能重复)
标签: c# c++ design-patterns