Heim >Backend-Entwicklung >C++ >Warum können Sie einen Zeiger auf einen Zeiger einer abgeleiteten Klasse nicht implizit in einen Zeiger auf einen Zeiger einer Basisklasse konvertieren?
Implizite Konvertierung von Zeiger-zu-Zeiger zwischen abgeleiteten und Basisklassen
Beim Umgang mit Zeiger-zu-Zeiger-Konvertierungen zwischen abgeleiteten und Basisklassen Klassen besteht ein häufiger Fehler darin, dass ein Zeiger-auf-Zeiger der abgeleiteten Klasse (Child) nicht implizit in einen Zeiger-auf-Zeiger der Basisklasse (Base) konvertiert werden kann. Dies liegt daran, dass eine solche Konvertierung zu unerwarteten und möglicherweise gefährlichen Situationen führen kann.
Betrachten Sie das bereitgestellte Beispielprogramm:
<code class="cpp">class Base { }; class Child : public Base { }; int main() { Child *c = new Child(); Base *b = c; Child **cc = &c; Base **bb = cc; // error: invalid conversion from ‘Child**’ to ‘Base**’ }</code>
Der Fehler tritt auf, weil der Compiler die Zuweisung von cc (einem Child) verhindert ) zu bb (eine Basis). Der Grund für dieses Verbot besteht in der Absicherung gegen mögliche Inkonsistenzen in dem von bb genannten Gegenstand. Wenn eine solche Konvertierung zulässig wäre, könnte dies zu einem Szenario führen, in dem bb auf eine Instanz von Base verweist, die nicht von Child abgeleitet ist.
Um dieses Problem zu beheben, gibt es zwei Ansätze:
Das obige ist der detaillierte Inhalt vonWarum können Sie einen Zeiger auf einen Zeiger einer abgeleiteten Klasse nicht implizit in einen Zeiger auf einen Zeiger einer Basisklasse konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!