我知道编译器优化有时会导致堆栈帧波动。所以我的问题是,在 c++ 中创建堆栈指针并将其传递给另一个函数并期望它指向被调用者中的同一个对象是否总是安全的。由于编译器优化,是否有可能最终指向一个意外的位置。
例如,对于任何编译器,这总是安全的吗?
int main(){
std::ofstream f("somefile");
foo(&f);
return 0;
}
或者我应该使用堆来获得一致的结果。
int main(){
std::ofstream *f=new std::ofstream("somefile");
foo(f);
close(*f);
delete f;
return 0;
}