faccio questo molto:Alternative al passaggio di un puntatore a se stessi per gli oggetti Possiedi
class Child{
Control*parent;
public:
Child(Control*theParent):parent(theParent){}
};
class Control{
Child child;
void makeChild(){ child=Child(this); }
//Control() : child(this) { } //another example
}
modo che il controllo possiede e gestisce il bambino, ma il bambino ha ancora riferimento al controllo padre.
Quando leggo argomenti generali sugli schemi di progettazione del programma, ecc., Sembra che questo metodo di organizzazione degli oggetti non sia particolarmente raccomandato. Capisco che ci sono dei rischi, per esempio non vuoi che il tuo child
abusi dei suoi genitori facendo fare al genitore cose che solo il genitore dovrebbe decidere di fare da solo; in tal caso, sembra facile prevenirlo assicurandosi che i metodi critici del genitore siano privati. Ma allora potresti avere un altro controller che gestisce il genitore, nel qual caso alcuni metodi dovrebbero essere pubblici, e ora tuo figlio ha accesso anche a quelli, quando in realtà solo qualche altro controller dovrebbe manipolarli.
Quindi posso vedere come questo può essere pericoloso.
Ma la mia domanda è, qual è un'alternativa comune? È necessario un genitore per possedere un figlio, ma è necessario che il bambino sia in grado di notificare occasionalmente il genitore delle cose. Come, se non quanto sopra?
Objective-C ha la NSNotificationCenter che permette notifiche senza riferimenti in realtà di passaggio, ma questo rende anche facile creare problemi organizzativi (perché è il mio bambino l'invio di questa notifica, e che sta per riceverlo?)
Bella domanda, lo faccio molto e mi sono chiesto (e mi chiedo ancora) se c'è un'alternativa per questo. –
Dovrebbe essere più simile a 'Control(): child (this) {}', non dovrebbe? –
@KerrekSB sì ho digitato lo pseudocodice senza compilarlo; l'ho corretto – johnbakers