2017-06-09 5 views
0

以前にオブザーバーパターンを実装すると、私は常にリスナー内部の所有者への参照を保持していました。そしてリスナーのctorで私はレジスタを使用し、dtorで私は登録を解除しました。サブスクライブ解除メソッドなしのオブザーバーパターンの実装

しかし、私はこのクラス間の弱いカップリングを維持するためのリファレンスを保持したくありません。

私はimplementation with weak-ptr.を思いついています。私の質問は、弱いptrでの購読解除の方法を使わずにオブザーバーパターンを実装してもよろしいですか? 問題が発生することはありますか?

答えて

1

はい、オブザーバーにweak_ptrを使用すると、自然にフィットします。

しかし、あなたの実装がelemがあなたのループの中に期限が切れるデータ競合を持っている、あなたはおそらく代わりに

for (auto elem : listenerList) 
{ 
    auto locked = elem.lock(); 
    if (locked) { locked->update(val); } 
    else { anyExpired = true; } 
} 
をしたいです
関連する問題