Warum sollte man davon Abstand nehmen, von std::string abzuleiten?
In seinem Buch Effective C rät Scott Meyers davon ab, vom std abzuleiten: :string-Klasse, hauptsächlich aufgrund des Fehlens eines virtuellen Destruktors. Dies ist jedoch nicht der einzige Grund, eine solche Vererbung zu vermeiden.
Kriterien für die Vererbung definieren
Um als geeignete Basisklasse zu dienen, muss eine Klasse:
std::string als Basis Die Klasse
std::string erfüllt diese Kriterien aus folgenden Gründen nicht:
Außerdem fehlen in C selbst in Szenarien, in denen die Vererbung ausschließlich der Wiederverwendbarkeit dient, Mechanismen, um Clients am Erstellen zu hindern Objekte einer abgeleiteten Klasse mithilfe eines Basisklassenzeigers. Dies kann den beabsichtigten Zweck der Einschränkung einer solchen Nutzung verletzen.
Folgen einer Vererbungsverletzung
Das Ignorieren dieser Richtlinien kann zu folgendem Code führen:
Zusammenfassend lässt sich sagen, dass die Vererbung in C so sein sollte ist für polymorphe Situationen reserviert und std::string sollte aufgrund seiner Designeinschränkungen und des Slicing-Problems nicht als Basisklasse verwendet werden. Der Einsatz alternativer Methoden wie Nicht-Member-Funktionen oder Komposition fördert idiomatische C-Praktiken und sorgt für Klarheit und Zuverlässigkeit des Codes.
Das obige ist der detaillierte Inhalt vonWarum sollten Sie niemals von std::string in C erben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!