Heim > Backend-Entwicklung > C++ > Funktioniert Polymorphismus mit Vektorreferenzen in C?

Funktioniert Polymorphismus mit Vektorreferenzen in C?

Barbara Streisand
Freigeben: 2024-11-02 12:21:30
Original
936 Leute haben es durchsucht

Will Polymorphism Work with Vector References in C  ?

Polymorphismus und Vektorreferenzen in C

Bei der Arbeit mit Vektoren und Polymorphismus in C kann es vorkommen, dass der Typ des gespeicherten Objekts entscheidend ist. Betrachten Sie das folgende Beispiel:

<code class="cpp">struct Instruction { virtual void execute() { } };
struct Add : public Instruction { int a, b, c; Add(int x, int y, int z) { a = x; b = y; c = z; } void execute() { a = b + c; } };

vector<Instruction> v;
Instruction* i = new Add(1, 2, 3);
v.push_back(*i);</code>
Nach dem Login kopieren

In diesem Code wird ein Vektor von Basisklassenobjekten erstellt und ein Objekt einer abgeleiteten Klasse (Hinzufügen) als Referenz in den Vektor verschoben. Die Sorge entsteht, wenn auf die Funktion „Ausführen“ für dieses Objekt zugegriffen wird:

<code class="cpp">auto ins = v.back();
ins.execute(); // Will the object retain its Add type?</code>
Nach dem Login kopieren

Wird Polymorphismus funktionieren?

Nein, wird es nicht. Der Vektor speichert Werte, keine Referenzen. Wenn das Add-Objekt in den Vektor verschoben wird, wird es daher kopiert, was zu einem Objekt vom Typ „Instruction“ und nicht „Add“ führt.

Reference_wrapper

Um sicherzustellen, dass Da der Polymorphismus intakt bleibt, besteht ein Ansatz darin, std::reference_wrapper zu verwenden, das Verweise auf Objekte anstelle von Objekten selbst speichert. Dies kann wie folgt implementiert werden:

<code class="cpp">vector<std::reference_wrapper<Instruction>> ins;</code>
Nach dem Login kopieren

Verhindern von Speicherlecks

Darüber hinaus weist der Code ein Add-Objekt dynamisch mit new zu, ohne es zu löschen, was zu einem Speicherleck führt . Um dies zu beheben, sollte der Code einen intelligenten Zeiger wie std::unique_ptr verwenden oder das Objekt manuell löschen, bevor es den Gültigkeitsbereich verlässt.

Das obige ist der detaillierte Inhalt vonFunktioniert Polymorphismus mit Vektorreferenzen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage