Aule
11-09-2005, 16:06
Hallo!
Erstmal sorry für diesen wenig aussagekräftigen Titel.
Nun zu meinem Problem:
Ich habe in C++ eine Klasse LoggingSystem. Diese verwaltet intern einen std::vector< LogOutputter* >
Über die Memberfunktion RegisterOutputter( LogOutputter* ) kann ich einen Eintrag in diese Liste hinzufügen. Soweit funktioniert alles.
Nur habe ich jetzt ein Problem: Ich will auch wieder Pointer aus der Liste löschen können.
Eine Möglichkeit wäre, RegisterOutputter() eine ID zurück geben zu lassen. Dann könnte ich auf Pointer anhand dieser ID (die Position im Container) zugreifen und wieder löschen. Ich dürfte sie aber nicht ganz entfernen, sondern nur auf NULL setzen, damit die anderen Positionen noch stimmen.
Die zweite Möglichkeit wäre, den std::vector durch eine std::map zu ersetzen. Dann müsste ich aber die bis jetzt höchste vergebene ID mitzählen.
Schließlich gäbe es noch, zum Löschen wieder den Pointer zu übergeben, die Liste durchzugehen und die in den Pointern gespreicherten Adressen mit der übergebenen zu vergleichen. Den betreffenden Eintrag würde ich löschen. Allerdings weiß ich nicht, ob das eine saubere Lösung ist.
Was würdet ihr mit empfehlen?
Das Programm läuft unter Linux, soll aber plattformunabhängig bleiben
Aule
Erstmal sorry für diesen wenig aussagekräftigen Titel.
Nun zu meinem Problem:
Ich habe in C++ eine Klasse LoggingSystem. Diese verwaltet intern einen std::vector< LogOutputter* >
Über die Memberfunktion RegisterOutputter( LogOutputter* ) kann ich einen Eintrag in diese Liste hinzufügen. Soweit funktioniert alles.
Nur habe ich jetzt ein Problem: Ich will auch wieder Pointer aus der Liste löschen können.
Eine Möglichkeit wäre, RegisterOutputter() eine ID zurück geben zu lassen. Dann könnte ich auf Pointer anhand dieser ID (die Position im Container) zugreifen und wieder löschen. Ich dürfte sie aber nicht ganz entfernen, sondern nur auf NULL setzen, damit die anderen Positionen noch stimmen.
Die zweite Möglichkeit wäre, den std::vector durch eine std::map zu ersetzen. Dann müsste ich aber die bis jetzt höchste vergebene ID mitzählen.
Schließlich gäbe es noch, zum Löschen wieder den Pointer zu übergeben, die Liste durchzugehen und die in den Pointern gespreicherten Adressen mit der übergebenen zu vergleichen. Den betreffenden Eintrag würde ich löschen. Allerdings weiß ich nicht, ob das eine saubere Lösung ist.
Was würdet ihr mit empfehlen?
Das Programm läuft unter Linux, soll aber plattformunabhängig bleiben
Aule