Abstrakte Klasse als Template



  • Hallo! Follgendes Problem.

    Meine Klasse Observer ist abstrakt.

    jetzt möchte ich eine Liste von dem Typ anlegen

    list<Observer> list;
    

    Das geht nicht, CompilerFehler... Liegt das an der Syntax oder geht sowas nicht in C++?

    Danke schon mal



  • Naja, du hast ja schon selbst gesagt Observer ist abstrakt. Was du tun kannst ist folgendes:

    list<Observer*> x;
    


  • In C++ ist

    std::list<Observer>
    

    eine Liste aus Observer-Objekten. Folglich ist das nicht möglich, falls Observer abstrakt ist, da keine Objekte von abstrakten Klassen erstellt werden können. C++ besitzt Wertsemantik, wenn nichts explizit angegeben ist ( & oder * ), handelt es sich um Objekte selbst, ansonsten um Referenzen bzw. Zeiger.

    Eine Liste aus Zeigern auf Observer sieht, wie schon von David_pb erwähnt, so aus:

    std::list<Observer*>
    

    Denk dran: Falls diese Zeiger besitzend sind, d.h. über sie wird Speicher angefordert, müssen sie den Speicher auch selbst wieder freigeben. Anders siehts aus, wenn es nur reine Verweise auf Objekte sind, die andernorts gespeichert wurden.



  • ok verstanden
    danke euch 🙂


Anmelden zum Antworten