如果我这样写代码:
shared_ptr<Foo> Bar::getFoo()
{
return m_foo;
}
void somewhereElse()
{
shared_ptr<Foo> foo = myBar.getFoo();
//do some stuff with foo
}
编译器可以以某种方式优化代码,以便将其更改为类似的内容:
void somewhereElse()
{
const shared_ptr<Foo> &foo = myBar.getFoo__by_ref_somehow();
//do some stuff with foo
}
我问是因为在并发执行的情况下这可能是一个问题。
我知道可以应用 RVO 并删除额外的副本,但是编译器可以完全消除副本吗?