コンパイラの最適化により、スタック フレームが不安定になる場合があることはわかっています。したがって、私の質問は、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;
}