std :: unordered_mapstd :: Zeichenfolge, myClass * - does std :: unordered_map :: erase () rufe myClass 'DTor?

8

Nehmen wir an, ich hätte einige unordered_map von Zeigern auf Klasseninstanzen, würde das Löschen eines Objekts aus dieser Map auch die Instanz löschen?

(Umformulierung der Frage :) Wenn ich diese Instanz löschen wollte, welche Version wäre richtig?

%Vor%

oder einfach

%Vor%

?

UPDATE: Wie von vielen Leuten vorgeschlagen, bin ich dazu übergegangen, shared_ptr zu verwenden, und es funktioniert großartig!

    
St0fF 21.10.2014, 08:01
quelle

1 Antwort

17

Nein, und da dies mit C ++ 11 markiert ist, sollten Sie std::unique_ptr / std::shared_ptr verwenden, um Ihre Objektzeiger an erster Stelle zu verwalten, z. B.

%Vor%

Auch wenn Sie religiös sicherstellen, dass Ihre Zeiger delete d vor jedem Aufruf von erase sind, müssen Sie immer noch überlegen, was im Falle einer Ausnahme passieren würde, oder wenn Sie demselben Schlüssel etwas anderes zuweisen oder irgendeine andere Möglichkeit, die auslaufen könnte. Wenn Sie keinen guten Grund haben, new und delete zu verwenden, tun Sie das nicht. Bleiben Sie bei std::unique_ptr / std::shared_ptr und std::make_unique / std::make_shared , es ist sicherer und macht Ihren Code leichter lesbar.

    
user657267 21.10.2014, 08:02
quelle

Tags und Links