我试图确保一个对象 - 由 shared_ptr
包装 - 只要通过将其作为值传递来执行函数就一直存在。但是在函数内部根本没有使用对象,所以我只想用它来“固定”:
void doSomething(std::shared_ptr<Foo>) {
// Perform some operations unrelated to the passed shared_ptr.
}
int main() {
auto myFoo{std::make_shared<Foo>()};
doSomething(std::move(myFoo)); // Is 'myFoo' kept alive until doSomething returns?
return 0;
}
我确实检查了不同优化级别 (GCC) 上的行为,它似乎按预期工作,但我不知道编译器是否仍可能在某些情况下优化它。
最佳答案
您不必担心 - 调用站点 的函数参数的生命周期保证在函数调用后继续存在。 (这就是为什么 foo(s.c_str())
对于 std::string s
起作用的原因。)
编译器不允许违反该规则,以as if 规则灵 active 为准。
关于c++ - 未使用的函数参数可以优化掉吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63737788/