重複の可能性:
一時ストリームへの書き込みが失敗するのはなぜですか?
ostrginstream
いくつかのカスタム ログ コードからクラスを派生させようとしています。奇妙なことに、ストリームに最初に書き込まれたものは常に破損します。以下は、自己完結型の最小限のデモンストレーション プログラムです。
#include <iostream>
#include <sstream>
using namespace std;
class Test : public ostringstream
{
public:
Test() { ; }
~Test() { cerr << "!" << str() << "!" << std::endl; }
};
int main(void)
{
Test() << "Hello" << ", " << "World";
}
予想される出力は次のとおりです。!Hello, world!
実際の出力は次のとおりです。
一時オブジェクトの作成方法と使用方法に問題があると思います。
簡単に修正できない場合、同じセマンティクスを取得する別の方法はありますか? 私が探しているのは、オブジェクトを簡単に作成し、それにシフトし、デストラクタで完全なメッセージを処理する機能です。(ユース ケースは、カスタム ロギング コードです。デストラクタは、タイムスタンプ、重大度のチェックなどを行います。)