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

Comment créer des objets et appeler des constructeurs sans utiliser « new » en C ?

Susan Sarandon
Libérer: 2024-11-03 09:17:30
original
247 Les gens l'ont consulté

How to Create Objects and Invoke Constructors Without Using `new` in C  ?

Constructeurs et Malloc

Contrairement aux expressions new et delete, std::malloc n'invoque pas le constructeur lors de l'allocation de mémoire pour un objet. Par conséquent, pour créer un objet tout en appelant également son constructeur, une approche alternative est nécessaire.

Solutions possibles :

1. Utilisation de new :
Il s'agit de l'utilisation principale prévue, car new crée explicitement un objet et invoque ensuite son constructeur.

Exemple :

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

2. Invocation explicite du constructeur (Placement New) :
Cette méthode implique l'allocation de mémoire à l'aide de malloc, puis l'appel manuel du constructeur à l'aide de la nouvelle syntaxe de placement.

Exemple :

<code class="cpp">A* a = (A*)malloc(sizeof(A));
new (a) A();

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

Il est important de noter que le placement new nécessite l'utilisation de la surcharge de constructeur correcte et doit être utilisé avec parcimonie. Généralement, new doit être utilisé pour la création d'objets, tandis que le placement new convient à des scénarios spécifiques où la gestion de la mémoire est gérée manuellement.

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