Risiken der Ableitung von C-STL-Containern
Trotz der potenziellen Vorteile der Ableitung von Klassen aus C-STL-Containern, wie z. B. Funktionsüberladung und Vorlagenspezialisierung und verbessertem Debugging sind mit diesem Ansatz inhärente Risiken verbunden.
Bedenken Sie Folgendes Beispiel:
#include <vector> class Rates : public std::vector<double> { }; class Charges : public std::vector<double> { }; int main() { auto p1 = new Rates; auto p2 = new Charges; kill_it(p2); // User code that knows nothing about Rates or Charges kill_it(p1); return 0; }
Die kill_it-Funktion löscht den Speicher des Opfers, während der nicht-virtuelle Destruktor von std::vector
Das Problem entsteht, wenn der Benutzer versehentlich Fehler in die ??? der kill_it-Funktion einfügt. Abschnitt. Wenn der Benutzer beispielsweise p2 so ändert, dass er auf ein Rates-Objekt zeigt, bevor er kill_it(p2) aufruft, wird der nicht-virtuelle Destruktor von std::vector
Um dieses Risiko zu mindern, wird im Allgemeinen empfohlen, beim Umgang mit STL-Containern Komposition anstelle von Ableitung zu verwenden. Die Zusammensetzung ermöglicht einen flexibleren und weniger fehleranfälligen Ansatz.
Das obige ist der detaillierte Inhalt vonSollten Sie von C-STL-Containern erben: Risiken und Alternativen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!