Quindi, se capisco correttamente, dai principi di progettazione SOLID, ogni classe dovrebbe mantenere una singola responsabilità.
Quindi dovrebbe esserci una classe che crea e gestisce una risorsa, una seconda classe che elabora l'elaborazione / aggiornamento delle risorse, la terza classe che collega la risorsa a qualche altra risorsa e così via.
La domanda è, come la esprimi in modo pulito nel codice?
Perché, in C ++, l'ordine di distruzione di classe gioca un ruolo importante.
Quindi ti trovi praticamente in una situazione in cui ottieni
ResourceClassInstanceManager cf;//does the ResourceClass creation, accounting and destruction?
ResourceClass &rcInstance = cf.GetResourceClass();//creates the instance of resource
ResourceClassUpdater rcu(&rcInstance);//updater that works on the class instance
ResourceConnector rcc(&rcInstance, &instanceOfAnotherClass);
Il problema qui è che se cf lascia prima l'oscilloscopio, o rcInstance viene cancellato prima di rcu o rcc. Le altre classi faranno comunque riferimento all'istanza non esistente di ResourceClass.
Questo sembra un po 'disordinato, poiché l'intera catena di creazione / distruzione deve essere seguita con molta attenzione e diventa davvero preoccupante non appena si hanno puntatori a oggetti e livelli di nidificazione più profondi.
Esiste una soluzione pulita per questo problema di progettazione?