ressourcenzugriff problemchen



  • hallo!

    ich habe eine klasse (A) die als wrapper dient für einen pointer der auf den anfang einer dynamisch alloziierten liste zeigt - im destruktor wird der speicher auch wieder freigegeben.

    eine weitere klasse (B) von mir benötigt zugriff auf den in der klasse A enthaltenen pointer. es werden von der klasse B relativ viele instanzen benötigt weshalb ich nicht für jede instanz eine neue liste alloziieren möchte. gleichzeitig darf der speicher der liste nicht freigegeben werden wenn noch eine instanz der klasse B existiert.

    wie löse ich das am besten? in jede instanz der klasse b einen pointer packen der auf die klasse A zeigt und das ganze im konstruktor intialisieren? oder geht das auch eleganter?



  • cghkmh schrieb:

    ich habe eine klasse (A) die als wrapper dient für einen pointer der auf den anfang einer dynamisch alloziierten liste zeigt - im destruktor wird der speicher auch wieder freigegeben.

    Na hoffentlich hast du auch den Kopierkonstruktor und den Zuweisungsoperator definiert. https://en.wikipedia.org/wiki/Rule_of_three_(C%2B%2B_programming)

    Oder noch besser, warum verwendest du nicht std::unique_ptr?

    wie löse ich das am besten?

    Zwei Möglichkeiten, der Eleganz geordnet:
    1. Design überdenken. Kann man nicht voraussagen, wann das letzte B gelöscht wird? Ich hatte noch nie den Fall, wo das nicht ging.
    2. Die Liste als std::shared_ptr halten (bzw. boost::shared_ptr) und sie mit den B's sharen.



  • Na hoffentlich hast du auch den Kopierkonstruktor und den Zuweisungsoperator definiert.

    ja, natürlich habe ich das.

    die liste wird durch eine winapi-funktion generiert und muss durch eine weitere funktion wieder freigegeben werden, also nichts mit new/delete.


Anmelden zum Antworten