Maison >développement back-end >C++ >Pourquoi ne puis-je pas utiliser Malloc avec std::strings dans les structures C ?
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;
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;
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!