Avevo pensato di usare lo "smart pointer" dentro Nodo con qualcosa di simile...
codice:
class Nodo {
        ...
        std::unique_ptr<Materiale> m; //puntatore fisso
        ...
};
o
codice:
class Nodo {
        ...
        std::unique_ptr<Materiale> m(); //puntatore fisso
        ...
};
ma, con il primo modo non ne vuole sapere di funzionare...

Con il secondo poi non sò come assegnare al puntatore l'indirizzo dell'oggetto in vector (che ora non dovrebbe più cambiare di indirizzo di memoria con questo tipo di puntatore...)

codice:
class Nodo {
        ...
        std::unique_ptr<Materiale> m(NULL); //puntatore fisso
        ...
};
con questo ottengo:
error: expected identifier before '__null'
error: expected ',' or '...' before '__null'