Questo simbolo sembra essere un distruttore generato dal compilatore. Qual è la differenza tra questo, "distruttore generato dal compilatore" e "distruttore di cancellazione scalare"? Ci sono altri tipi di personaggi generati dal compilatore?Qual è il significato del simbolo "vettore che elimina il distruttore" in VC++?
risposta
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);
}
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
@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
Perché non accetta l'anwser? – Liviu