Puis-je allouer un bloc de mémoire avec un nouveau?

Donc, étant donné cette structure c :

typedef struct { int* arr1; int* arr2; } myStruct; 

Cette réponse décrit l’utilisation d’un seul malloc pour allouer une myStruct et ses tableaux en même temps:

 myStruct* p = malloc(sizeof(*p) + 10 * sizeof(*p->arr1) + 10 * num * sizeof(*p->arr2); if(p != NULL) { p->arr1 = (int*)(p + 1); p->arr2 = p->arr1 + 10; } 

Ce que j’aimerais savoir, existe-t-il une manière similaire de faire cela avec new ?
Évidemment, je veux pouvoir allouer une taille que je reçois au moment de l’exécution, comme c’est le cas avec l’exemple C.

Vous pouvez allouer un bloc de mémoire en utilisant new avec un tableau de caractères, puis utiliser placement new pour appeler le constructeur sur ce bloc de mémoire.

En c ++, nous utilisons new car il appelle les constructeurs des objects alloués. Donc, la manière appropriée d’atteindre ce que vous voulez est de laisser le constructeur de la structure faire les allocations nécessaires.

Y a-t-il une raison pour laquelle vous voulez le faire comme dans le lien que vous avez fourni? Un peu plus de contexte aiderait. Sinon, j’utiliserais personnellement un constructeur pour le faire:

  struct myStruct { int* arr1; int* arr2; myStruct(int num) { arr1 = new int[10]; arr2 = new int[10*num]; } ~myStruct() { delete[] arr1; delete[] arr2; } }; int main() { int num = 3; myStruct* a; a = new myStruct(3); delete a; }