2012-06-26 11 views

risposta

8

Le funzioni denominate 'scalar deleting destructor' e 'vector deleting destructor' sono funzioni di aiuto create dal compilatore VC durante la generazione del codice per l'istruzione delete. Non confonderli con il distruttore di classe che potrebbe anche essere generato dal compilatore. Il primo può essere espresso in pseudocodice come

void scalar_deleting_destructor(A* pa) 
{ 
pa->~A(); 
A::operator delete(pa); 
} 

e la seconda come

void vector_deleting_destructor(A* pa, size_t count) 
{ 
for (size_t i = 0; i < count; ++i) 
pa[i].~A(); 
A::operator delete[](pa); 
} 
+1

Grazie, Andrey. Sono un po 'confuso riguardo l'operatore di cancellazione interna qui. Questo distruttore di cancellazione scalare è generato dal compilatore ed è chiamato da "cancella a", vero? Sembra che la chiamata interna per cancellare causi la ricorsione? – Thomson

+3

@Thomson Fammi provare a renderlo più chiaro. 'delete a' è un'istruzione * delete *, cioè un costrutto di linguaggio, che non deve essere confuso con' A :: operator delete' che è un * delete operator *, una funzione che rilascia di fatto la memoria. Non ho lo standard C++ a portata di mano in questo momento, potrei fornire riferimenti un po 'più tardi. – Andrey

Problemi correlati