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;
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;
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!