Étant donné un pointeur vide vers un "blob" de mémoire brute, il y a deux façons d'écrire quelque chose dessus.Ecriture de types hors classe dans la mémoire brute
La première méthode consiste à utiliser le placement nouveau. Cette méthode a l'avantage d'appeler le ctor automagiquement quand on a affaire à des classes-types. Cependant, quand je traite des types hors classe, serait-il préférable de faire un casting à la place? J'imagine que ça pourrait être plus rapide.
(pLocation est un pointeur nul dans une goutte de mémoire
// ----- Is this better -----
*reinterpret_cast<char*>(pLocation) = pattern;
// ----- Or is this better -----
::new(pLocation) char(pattern);
Vous ne savez pas exactement ce que vous essayez d'obtenir ici, mais 'pattern' ne sera pas copié dans' pLocation' dans le 1er échantillon - vous pouvez simplement le remplacer par 'pLocation = pattern;' si vous cherchez juste pour l'attribution de pointeur. – adamk
motif est un caractère. Il sera copié là où pLocation pointe vers, le code compile et fonctionne comme prévu. Les deux déclarations sont équivalentes dans ce cas. – aCuria
Dans les deux cas, veillez à ce que pLocation soit correctement alignée avec les restrictions de limite de mots sur votre plate-forme. Par exemple, vous pourriez être en mesure de mettre un 'char' n'importe où, mais vous ne pourriez pas mettre un' long' n'importe où sauf les adresses qui sont multiples de sa taille. –