RAIIを使用して、破棄されるまでストリームに作用するオブジェクトを作成しようとしています。たとえば、endl
追加されるたびに自分自身をフラッシュするストリームがあります。ほとんどの場合、これが必要ですが、常にそうとは限りません。「endlでフラッシュしないでください」と言えるようにしたいのですが、例外的に安全である必要もあります。stream->NoFlush()
ですから、クラスのメンバーを設定するだけではできません。とにかく、私が知りたいのはこれです。私が次のようなコードを持っている場合
CStreamModifier no_flush;
stream->NoFlush(no_flush);
// as long as no_flush is in scope I get the behaviour I want
... do some stuff on the stream, without referencing no_flush ...
// no_flush goes out of scope here.
コンパイラはno_flushの存続期間を最適化できますか?たとえば、2行目以降は使用されていませんが、最後までそのままにしておく必要があります。このような最適化についてはあまり聞いたことがないので、大丈夫だと思いますが、確認したいと思います。