Ho un progetto software abbastanza grande scritto in   c++   . 
 Qui c'è un   class foo    che rappresenta una struttura (con cui non intendo la struttura dei programmatori) in cui   foo    -oggetti possono essere parte di un   foo    -oggetto. 
 Ecco   class foo    nella forma più semplice: 
class Foo
{
    private:
        std::vector<unsigned int> indices;
    public:
        void addFooIndex(unsigned int);
        unsigned int getFooIndex(unsigned int);
};
 Ogni   foo    -object è attualmente memorizzato in un oggetto di   class bar   . 
class Bar
{
    private:
        std::vector<Foo> foos;
    public:
        void addFoo(Foo);
        std::vector<Foo> getFoos();
}
 Quindi se un   foo    -object dovrebbe rappresentare una struttura con un oggetto foo "interno", al momento faccio 
Foo foo;
Foo innerFoo;
foo.addFooIndex(bar.getFoos().size() - 1);
bar.addFoo(innerFoo);
E per ottenerlo, ovviamente uso:
Foo foo;
for ( unsigned int i = 0; i < foo.getFooIndices().size(); ++i )
{
    Foo inner_foo;
    assert( foo.getFooIndices().at(i) < bar.getFoos().size() );
    inner_foo = bar.getFoos().at(foo.getFooIndices().at(i));
}
Quindi questo non è un problema. Funziona e basta. Ma non è la soluzione più elegante.
 Ora desidero rendere la% internafoo s "più connessa" con l'oggetto   foo    -object. Dovrebbe ovviamente cambiare   class foo    in: 
class Foo
{
    private:
        std::vector<Foo*> foo_pointers;
    public:
        void addFooPointer(Foo*);
        std::vector<Foo*> getFooPointers();
};
Quindi ora, per la mia domanda: come modificare delicatamente questa classe base senza rovinare l'intero codice? C'è un "modo pulito"?