Distruttori di tipi predefiniti (int, char ecc.)

In C ++ il seguente codice fornisce un errore del compilatore:

void destruct1 (int * item) { item->~int(); } 

Questo codice è quasi lo stesso, ho appena digitato l’int a un altro tipo e qualcosa di magico accade:

 typedef int myint; void destruct2 (myint * item) { item->~myint(); } 

Perché il secondo codice funziona? Un int ottiene un distruttore solo perché è stato tipizzato?

Nel caso ti chiedi perché mai uno vorrebbe farlo: questo viene dal refactoring del codice C ++. Stiamo rimuovendo l’heap standard e lo sostituiamo con i pool selfmade. Ciò richiede di chiamare il posizionamento-nuovo e i distruttori. So che chiamare i distruttori per i tipi primitivi è inutile, ma li vogliamo comunque nel codice nel caso in cui in seguito sostituiremo i POD con classi reali.

Scoprire che gli int nudi non funzionano, ma quelli digitati sono stati piuttosto sorprendenti.

Btw – Ho una soluzione che coinvolge funzioni modello. Digitiamo semplicemente all’interno del modello e tutto va bene.