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 !!!
Question simple ou complexe, je ne sais pas. Comment fait-on un delete d'un tableau construit par displacement new ?

Faut-il faire explicitement comme ceci ?
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);
Merci.

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);