Heim > Backend-Entwicklung > C++ > Warum kann ich Malloc nicht mit std::strings in C-Strukturen verwenden?

Warum kann ich Malloc nicht mit std::strings in C-Strukturen verwenden?

Linda Hamilton
Freigeben: 2024-11-18 19:46:02
Original
953 Leute haben es durchsucht

Why Can't I Use Malloc with std::strings in C   Structures?

Verwendung von Malloc und std::Strings in C-Strukturen

Beim Versuch, eine Struktur zu verwenden, die std:: enthält, ist ein häufiges Problem aufgetreten. Zeichenfolgen mit dynamischer Speicherzuweisung mithilfe von malloc(). Dieses Problem ist auf die Komplexität der Objektkonstruktion und Speicherverwaltung in C zurückzuführen.

Das Problem mit Malloc

Malloc weist Rohspeicher zu und erstellt einen nicht initialisierten Speicherplatzblock. Die Verwendung von malloc für Objekte mit nicht trivialen Konstruktoren wie std::string ist jedoch problematisch, da der Konstruktor nicht aufgerufen wird, um das Objekt ordnungsgemäß zu initialisieren.

Verwendung von New anstelle von Malloc

Die Lösung besteht darin, den C-Operator new anstelle von malloc zu verwenden. New erstellt ein neues Objekt und ruft seinen Konstruktor auf, um eine ordnungsgemäße Initialisierung sicherzustellen. In Ihrem Fall können Sie Folgendes verwenden:

example *ex = new example;
Nach dem Login kopieren

Placement New für Rohspeicher verwenden

Wenn Sie speziell Malloc verwenden müssen, können Sie Rohspeicher mit Malloc zuweisen und verwenden Sie dann die Platzierung „new“, um das Objekt in diesem Speicher zu erstellen:

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example;
Nach dem Login kopieren

Die direkte Verwendung von „new“ ist in diesem Szenario jedoch die bevorzugte Methode.

Das obige ist der detaillierte Inhalt vonWarum kann ich Malloc nicht mit std::strings in C-Strukturen verwenden?. 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