2015-07-01 13 views
5

Ho un semplice programma:Perché viene chiamato il distruttore della classe derivata?

struct B 
{ 
    virtual ~B() {} 
}; 

struct D : public B 
{ 
    ~D() {} 
}; 

Così, quando chiamo

B* b = new D; 

b->~B(); 

il motivo per cui è il distruttore della classe derivata chiama? È virtuale ma chiamiamo il distruttore per nome o esiste un nome nascosto del distruttore che è lo stesso per tutte le classi?

risposta

11

Il distruttore non ha un nome, di per sé. Per una classe C, la sintassi ~C viene utilizzata per fare riferimento al distruttore singolo, senza nome.

Nel tuo caso, ~B significa semplicemente "il distruttore". Perché è virtuale, il dispatch dinamico avviene in fase di esecuzione sul distruttore di D viene chiamato.

Se avete fatto questo, invece:

b->B::~B(); 

sarebbe disabilitare dispatch dinamico (come qualsiasi altra chiamata qualificato fa) e si sarebbe solo chiamare distruttore B s'.

Problemi correlati