Maison > développement back-end > C++ > Pourquoi ne puis-je pas utiliser Malloc avec std::strings dans les structures C ?

Pourquoi ne puis-je pas utiliser Malloc avec std::strings dans les structures C ?

Linda Hamilton
Libérer: 2024-11-18 19:46:02
original
913 Les gens l'ont consulté

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

Utilisation de Malloc et std::Strings dans des structures C

Vous avez rencontré un problème courant lorsque vous tentez d'utiliser une structure contenant std:: chaînes avec allocation de mémoire dynamique à l'aide de malloc(). Ce problème découle de la complexité de la construction d'objets et de la gestion de la mémoire en C.

Le problème avec Malloc

Malloc alloue de la mémoire brute, créant un bloc d'espace non initialisé. Cependant, utiliser malloc pour des objets avec des constructeurs non triviaux, comme std::string, est problématique car il n'invoque pas le constructeur pour initialiser correctement l'objet.

Utiliser New au lieu de Malloc

La solution est d'utiliser l'opérateur C new au lieu de malloc. New crée un nouvel objet et appelle son constructeur, garantissant ainsi une initialisation correcte. Dans votre cas, vous pouvez utiliser :

example *ex = new example;
Copier après la connexion

Utilisation du nouveau placement pour la mémoire brute

Si vous avez spécifiquement besoin d'utiliser malloc, vous pouvez allouer de la mémoire brute avec malloc puis utilisez le placement new pour construire l'objet dans cette mémoire :

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example;
Copier après la connexion

Cependant, utiliser new directement est la méthode préférée dans ce scénario.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal