Wie legt der Compiler Instanzen im Speicher ab?



  • Speziell würde mich interessieren: Werden die Methoden nur einmal für alle Instanzen auf den Heap geschaufelt, oder für jede Instanz? Ich hoffe doch nicht letzteres!



  • na was waere denn optimaler und machbar? 😉 ~natuerlich werden die methoden nur einmal angelegt, aber frag mich nicht, wie das bei templateklassen gemacht wird~



  • Bei Templates werden für jeden Typen die genutzten Methoden separat instanziert, auch wenn man die eventuell gleich implementieren könnte:

    template <typename T> class Temp {
    public:
       void func() {}
       void gunc() {}
    };
    
    void use() {
       Temp<int> a;
       Temp<double> b;
       a.func();
       b.func();
       a.gunc();
    }
    
    ponto@burns:~> g++ -c instanz.C
    ponto@burns:~> nm instanz.o | c++filt
    00000000 T use()
    00000000 W Temp<double>::func()
    00000000 W Temp<int>::func()
    00000000 W Temp<int>::gunc()
    ponto@burns:~>
    

    Da für double gunc() nicht benutzt wurde, wird es auch nicht instanziert.


Anmelden zum Antworten