placement new sur tableau
Code:
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:
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:
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); |