Maison > développement back-end > C++ > le corps du texte

Comment puis-je créer un objet à l'aide de malloc et garantir l'invocation du constructeur ?

Patricia Arquette
Libérer: 2024-11-01 16:04:02
original
204 Les gens l'ont consulté

 How can I create an object using malloc and ensure constructor invocation?

Invocation de constructeur avec Malloc : un contraste avec New et Delete

Contrairement aux expressions omniprésentes new et delete, std::malloc présente un comportement unique : il le fait n'invoque pas automatiquement le constructeur d'un objet lors de l'allocation de mémoire. Cela soulève la question : comment pouvons-nous créer un objet à l'aide de malloc tout en garantissant l'invocation du constructeur ?

Réponse :

L'approche recommandée et intuitive consiste à utiliser l'opérateur new, qui gère intrinsèquement à la fois l’allocation de mémoire et l’invocation du constructeur. Alternativement, nous pouvons appeler manuellement le constructeur via "placement new", une technique qui utilise des appels de constructeur explicites.

Gestion personnalisée via Placement New

L'extrait de code suivant illustre l'utilisation du placement new :

<code class="cpp">A* a = (A*)malloc(sizeof(A));
new (a) A();</code>
Copier après la connexion

Ici, le pointeur a pointe vers la mémoire allouée de taille sizeof(A), et le placement new expression new (a) A() construit ensuite un objet A à cet emplacement mémoire.

Lorsque l'objet n'est plus nécessaire, nous appelons manuellement le destructeur et libérons la mémoire allouée :

<code class="cpp">a->~A();
free(a);</code>
Copier après la connexion

Il est important de noter que le placement new n'est généralement pas utilisé, sauf s'il existe des circonstances spécifiques qui l'interdisent l'utilisation de new et delete.

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