Quando usar destruidores virtuais?

Eu tenho um entendimento sólido da maioria das teorias de OO, mas a única coisa que me confunde muito são os destruidores virtuais.

Eu pensei que o destruidor sempre é chamado, não importa o que e para cada objeto na cadeia.

Quando você pretende torná-los virtuais e por quê?