Dal boost::/std::shared_ptr
hanno il vantaggio di tipo cancellando la loro deleter, si possono fare cose belle comeÈ necessario un distruttore virtuale per la tua interfaccia, se lo memorizzi sempre in un shared_ptr?
#include <memory>
typedef std::shared_ptr<void> gc_ptr;
int main(){
gc_ptr p1 = new int(42);
gc_ptr p2 = new float(3.14159);
gc_ptr p3 = new char('o');
}
e questo sarà correttamente eliminare tutti puntatore grazie alla deleter corretta salvati.
Se si assicura che ogni implementazione dell'interfaccia venga sempre creata con shared_ptr<Interface>
(o make_shared<Interface>
), è effettivamente necessario un distruttore virtual
? Lo dichiarerei lo virtual
in ogni caso, ma voglio solo sapere, dal momento che shared_ptr
eliminerà sempre il tipo con cui è stato inizializzato (a meno che non venga fornito un altro delet personalizzato).
possibile duplicato di [shared_ptr magic:)] (http://stackoverflow.com/questions/3899790/shared-ptr-magic) –
@Armen: Questo non è un duplicato, non sta chiedendo come 'shared_ptr' fa ma se dovresti usare un distruttore virtuale * sapendo * che 'shared_ptr' fa quella magia. –
@David: No, non lo fa. Dice che userà comunque un distruttore virtuale. Sta chiedendo se è OK non averne uno. Quindi è un duplicato –