最佳做法是什么(cs是TCriticalSection)
我已经看过很多了
cs->Enter();
try {
}
__finally {
cs->Leave();
}
但为什么不进入try块中的关键部分?它会引起任何问题吗?
try {
cs->Enter();
}
__finally {
cs->Leave();
}
答案 0 :(得分:2)
除非Leave()
成功,否则请勿致电Enter()
。如果Enter()
失败,则调用Leave()
可能会使cs处于错误状态。对于需要使用try..__finally
来管理资源的任何代码,这通常应遵循相同的规则。首先分配/获取资源,然后进入try
块。或者更改代码以改为使用基于RAII的逻辑或完全使用try..__finally
。