Domanda

Credo virtuale da solo è generalmente sufficiente.

C'è un altro motivo per rendere pura virtuale che alla forza classi derivate di implementare il proprio distruttore Voglio dire, se si assegna qualcosa nella tua classe costruttore si dovrebbe impement il proprio distruttore -? Se il vostro classe è derivata o meno.

non conta come risposta, come so già:. Se volete che il vostro classe astratta e non ha funzioni virtuali puri - lasciare che sia il distruttore

Alcuni usi di più?

È stato utile?

Soluzione

  

Se volete che il vostro classe astratta e   non ha funzioni virtuali puri - congedo   al distruttore.

In realtà, non credo che ci sia di più. Tutto il distruttore virtuale pura fa, è rendere tutta la classe astratta. È necessario fornire l'implementazione per il distruttore virtuale pura, nonché per un distruttore virtuale non pura, i distruttori delle classi derivate sono virtuali con distruttore virtuale da solo, ecc.

In sostanza, se una classe ha già alcune funzioni virtuali pure, il suo comportamento sarebbe equivalente con distruttore virtuale e puro virtuale.

Altri suggerimenti

No. Se la classe di base assegna qualcosa, è di responsiblity per rilasciarlo.

Inoltre, se la classe derivata non allocte nulla, non c'è alcun punto in costringendoli a scrivere un dtor manichino.

Idealmente la lingua deve avere un modo per assicurare (implicitamente o meno) che il distruttore è virtuale in classi astratte senza dover definire o renderlo puro. Ma non ha.

Quindi la scelta è: o rendere più puro, e avere l'onere di definire in ogni classe derivata, o fare non, e hanno l'onere di definire nella classe astratta. Il secondo è meno lavoro, e il codice anche più brevi, così mi piacerebbe andare per esso.

Se la classe astratta è un'interfaccia pura, senza membri dati di quanto si potrebbe andare d'accordo con fare il dtor pura virtuale. Preferisco che me stesso, poiché ho visto così tanti programmatori hot-shot dimenticare di fare un distruttore virtuale a tutti: anche quando scrivono classi derivate contenenti metodi virtuali. Quindi mi sento di farlo esclusivamente per ridurre al minimo problemi di manutenzione lungo la strada.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top