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.