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.
L'extrait de code suivant illustre l'utilisation du placement new :
<code class="cpp">A* a = (A*)malloc(sizeof(A)); new (a) A();</code>
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>
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!