以下のクラスを検討してください
class Forwarder : public Base
{
private:
Base* dest;
Forwarder* next;
public:
explicit Forwarder(Base* dest, Forwarder* next)
: dest(dest), next(next) {}
~Forwarder() {
if (next) delete next;
delete dest;
}
void DoStuff() {
if (next) next->DoStuff();
dest->Process();
}
};
その目的は、イベントの転送チェーンを作成することです。そのためDoStuff
、ベースで呼び出された場合、チェーン全体に伝播し、他のユーザーに通知します。これを使用して、出力をさまざまなストリームに送信したいと考えています。とにかく、チェーンを作成する一般的な方法は次のようになります。
Forwarder f(new First, new Forwarder(new SomeOther, new Forwarder(new YouGetTheIdea, NULL)));
これは、チェーンを構築するための非常に便利な方法ですが、危険であり、コンパイラが物事をシャッフルできるため、メモリ リークに対して脆弱です。私が望んでいるようなチェーンを構築するより安全な方法はありますか (できれば無駄のない構文を保持することをお勧めします)。