Heim >Backend-Entwicklung >C++ >Warum gibt es in C-Bibliotheken zwei Konstruktorsymbole?

Warum gibt es in C-Bibliotheken zwei Konstruktorsymbole?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-28 17:50:10735Durchsuche

Why Are There Two Constructor Symbols in C   Libraries?

Doppelte Definition von Konstruktorsymbolen in C-Bibliotheken

In C erscheinen Konstruktordefinitionen in Bibliotheken zweimal, wenn sie mit nm untersucht werden. Dies liegt an der Itanium C ABI, die mehrere Konstruktoreinträge für die Polymorphismusunterstützung erfordert.

Die verstümmelten Namen für die Konstruktoren geben ihren Zweck an:

  • C1: Vollständiger Objektkonstruktor
  • C2: Basisobjektkonstruktor

Auch wenn eine Klasse möglicherweise keine virtuellen Basisklassen hat, GCC gibt beide Konstruktoren aus, da ABI Polymorphismus unterstützt. Dieses Verhalten gilt als bekanntes Problem in GCC, wobei der Compiler dieses Verhalten möglicherweise wegoptimieren könnte, wenn kein Polymorphismus beteiligt ist.

Die verschiedenen Arten von Konstruktoren haben die folgenden Bedeutungen:

  • Vollständiger Objektkonstruktor: Konstruiert das gesamte Objekt, einschließlich virtueller Basisklassen.
  • Basisobjekt Konstruktor: Erstellt das Objekt selbst und initialisiert Datenelemente und nicht virtuelle Basisklassen.
  • Zuweisender Objektkonstruktor: Nicht häufig anzutreffen, führt die Aktionen des vollständigen Objektkonstruktors und zusätzlich aus reserviert Speicher mithilfe des Operators new.

Während diese doppelte Ausgabe von Konstruktorsymbolen normalerweise keine Probleme verursacht, kann sie zu Verwirrung führen beim Untersuchen von Bibliothekssymbolen mit Tools wie nm.

Das obige ist der detaillierte Inhalt vonWarum gibt es in C-Bibliotheken zwei Konstruktorsymbole?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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