【发布时间】:2010-04-27 21:30:02
【问题描述】:
具体来说,我想知道我应该写哪一个:
{
shared_ptr<GuiContextMenu> subMenu = items[j].subMenu.lock();
if (subMenu)
subMenu->setVisible(false);
}
或:
{
if (items[j].subMenu.lock())
items[j].subMenu.lock()->setVisible(false);
}
我不需要遵守任何风格准则。优化后,我认为这两种选择都不会影响性能。通常首选的样式是什么?为什么?
编辑:items[j].subMenu 的类型是 boost::weak_ptr。 lock() 从中创建一个 shared_ptr 。实际上,上述两个版本在临时 shared_ptr 持续多长时间方面存在模棱两可的差异,因此我将两个示例包裹在 { 大括号 } 中以解决其中的歧义。
【问题讨论】:
-
lock()是变异方法吗?看起来可能是这样。 -
@Troubadour:这是最常见的优化之一。
-
@Xavier:假设
lock()有副作用 - 怎么会? -
@gf:因为lock这个名字意味着有东西被锁定了,所以状态发生了变化。
-
@Xavier:除非编译器可以证明没有副作用,否则它不能合并语句(因为这会改变语义)。这是不正常的,绝对不是“常见的”(与例如整数 CSE 相比)
标签: c++ styles temporaries