Question simple ou complexe, je ne sais pas. Comment fait-on un delete d'un tableau construit par displacement new ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int i=une_valeur; void *pv=operator new(sizeof(UneClasse)*i); UneClasse *puc=new(pv) UneClasse [i]; delete [] puc;//crash !!!
Faut-il faire explicitement comme ceci ?Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 int i=une_valeur; void *pv=operator new(sizeof(UneClasse)*i); UneClasse *puc=new(pv) UneClasse [i]; for (int x=0;x<i;++x) (&puc[x])->~UneClasse(); operator delete(pv);
EDIT: en fait même la deuxième écriture crash. Ceci semble fonctionner:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int i=une_valeur; void *pv=operator new(sizeof(UneClasse)*i); int x; UneClasse *puc=reinterpret_cast<UneClasse *>(pv); for (x=0;x<i;++x) new(&puc[x]) UneClasse; for (x=0;x<i;++x) (&puc[x])->~UneClasse(); operator delete(pv);
Partager