2

私はイベント処理システムをコーディングしています(オブザーバーパターンに従います...)。イベントクラスを伝播または拡散するための最良の方法を知りたいのですが、次のようになります。

class Event{
public:
    Event(int code);
    virtual ~Event();
    int getCode() const;

private:
    int code;
};

ポインタを介して(ヒープ割り当て)またはインスタンスとして(スタック割り当て)送信する方がよいかどうかの詳細。

Event e(1);
notifyAll(e);

vs

Event * e = new Event(1);
notifyAll(e)

私はそれが本当に一般的な質問であることを知っています、そして私は一般的なケースのための提案されたガイドラインを知っています、しかし私はパフォーマンス、最適化、スレッドセーフなどの世話をするイベント処理の特定のケースで知りたいです。

私の考えは、クラスが単なるPODであることがわかったスタック割り当てを介して送信し、ライフ管理の問題を回避することです(またはスマートポインターを使用します)。一方、私のアプリではイベント伝播ツリーが非常に大きくなる可能性があるため、問題になる可能性があります。

ありがとうございました。(たとえば、qtほど複雑ではない、優れた実装を知っている場合は、それを書き留めてください)

4

1 に答える 1

1

スタック割り当てオブジェクトを参照渡しする場合、ポインタ渡しとパフォーマンスの違いはありません。

ポインターで渡す場合、コードの一部deleteがオブジェクトを処理する必要があります。OTOH、オブジェクトの有効期間が作成されたスコープを超えて持続する必要がある場合は、動的割り当てを行う必要があります。その場合、参照カウントを行う必要があるかもしれません。これ以上の情報がないとなんとも言えません。

于 2011-04-19T17:41:59.910 に答える