是否有任何情况下将代码放在括号内以缩小其范围是我可能想要做的事情,或者这是你们会告诉我的那种情况之一,"如果你需要在你的代码中这样做,那么你的代码编写得很糟糕."
例如:
//***CODE****
{
int foo=stuff;
//use foo, and then I'm done using it forever
}
//****MORE CODE****
Run Code Online (Sandbox Code Playgroud)
Jam*_*lis 42
是的,因为这样做的好处是该块中的任何局部变量都将在块的末尾被销毁.如果您想要尽快释放某种范围保护,这尤其有用,例如,
{
std::lock_guard<std::mutex> lock(the_mutex);
// use protected objects
} // release the_mutex
Run Code Online (Sandbox Code Playgroud)
但请注意,使用这样的范围块表示您的代码需要重构:块的内容通常可以拆分为单独的函数,可以对其进行命名和重用.
例如,如果您使用RAII习语,这可能很有用.例如,同步锁定.
在大多数情况下,方法的范围应该足够小以用于这种锁.有时,您希望限制任一性能的锁定范围,或者避免向重构方法发送大量参数.但是,使用这个技巧不应该太常见.
使用C++可以做的所有事情,添加一个范围实际上是最不重要的.您拥有的代码没有任何问题,我有时会这样做(通常是为了确保本地人仅限于此案例).根据用途,您可能会考虑将代码重构为单独的函数.
我在自己的代码中发现了另一个用例:单元测试析构函数。使用UnitTest ++的示例(但无论单元测试框架如何,都适用相同的原理):
TEST(SomeTest)
{
{
SomeClass someObject;
} // someObject is destroyed
CHECK(isSomeClassDestructorWorking())
// e.g. have all resources been freed up?
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9878 次 |
| 最近记录: |