Questo il codice completo:
codice:
#include <iostream>
#include <vector>
#include <memory>
using namespace std;

class Materiale {
    public:
        virtual double get_E() {
            return 0.;
        }
};

class Acciaio : public Materiale {
    double E;

    public:
    Acciaio(){
        E=210000.;
    }

    double get_E(){
        return E;
    }
};
/* eventuale altro materiale*/
/*class Acciaio2 : public Materiale {
    double E;

    public:
    Acciaio(){
        E=100000.;
    }

    double get_E(){
        return E;
    }
};
*/

class Nodo {
        std::unique_ptr<Materiale> mat;

        //inizio costruttori e funzioni
        public:
        Nodo() {
        }

        /**/
        double get_E() {
            return mat->get_E();
        }

        void set_materiale(Materiale &m){
            mat.reset(&m);
        }
};

class Elemento {
        public:
        std::vector<Nodo> nodo;

        //inizio costruttori e funzioni
        public:
        Elemento() {
        }

        double get_E() {
            double E=0.;
            for(int i=0;i<nodo.size();i++){
                E=E+nodo[i].get_E();
            }
            return E/nodo.size();
        }
};

int main()
{

    std::vector<Elemento> elemento;
    std::vector<Acciaio> acciaio;

    elemento.emplace_back(Elemento());

    elemento[0].nodo.emplace_back(Nodo());
    elemento[0].nodo.emplace_back(Nodo());

    for(int i=0;i<elemento.size();i++) {
        for(int k=0;k<elemento[i].nodo.size();k++) {
            acciaio.emplace_back(Acciaio());
            elemento[i].nodo[k].set_materiale(acciaio[i]);
        }
    }

    for(int i=0;i<elemento.size();i++) {
        for(int k=0;k<elemento[i].nodo.size();k++) {
            std::cout<<elemento[i].nodo[k].get_E()<<"\n";
        }
    }

    return 0;
}
emplace o non emplate, std::unique_ptr<Materiale> mat; o std::unique_ptr<Materiale> mat(NULL); o std::unique_ptr<Materiale> mat();

non funziona... (fate un rapido copia e incolla per vedere!) ... io proprio non so' più che santi chiamare!
non ho mai perso tanto tempo dietro a un problema come questa volta...

Nella realtà è tanto semplice: Tanti oggetti che contengono tanti oggetti che possono collegarsi ad altri oggetti (diversi, la cui classe madre è la classe Materiale).