私はこれをよくします:
class Child{
Control*parent;
public:
Child(Control*theParent):parent(theParent){}
};
class Control{
Child child;
void makeChild(){ child=Child(this); }
//Control() : child(this) { } //another example
}
したがって、Control は子を所有して操作しますが、子は親 Control への参照を保持しています。
プログラムの設計パターンなどの一般的なトピックを読むと、このオブジェクトの整理方法は特に推奨されていないようです。child
たとえば、親だけが自分で決定する必要があることを親に行わせることで、親を虐待したくないなどのリスクがあることを認識しています。その場合、親の重要なメソッドがプライベートであることを確認することで簡単に防ぐことができます。ただし、親を管理する別のコントローラーがある場合、一部のメソッドはパブリックにする必要があり、実際には他のコントローラーだけがそれらを操作する必要がある場合でも、子もそれらにアクセスできます。
ですから、これがいかに危険であるかがわかります。
しかし、私の質問は、一般的な代替手段は何ですか? 子供を所有するには親が必要ですが、親に時々物事を通知できるようにするためには子供が必要です。上記ではない場合、どのように?
Objective-C には、実際に参照を渡さずに通知を許可する NSNotificationCenter がありますが、これにより組織的な問題が発生しやすくなります (なぜ私の子供はこの通知を送信し、誰がそれを受け取るのでしょうか?)