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
Linda Hamiltonoriginal
2024-11-18 19:46:02914parcourir

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;

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!

Déclaration:
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