¿Cuándo usar destructores virtuales?

Tengo una sólida comprensión de la mayoría de la teoría OO, pero lo único que me confunde mucho son los destructores virtuales.

Pensé que el destructor siempre se llama sin importar qué y para cada objeto en la cadena.

¿Cuándo debes hacerlos virtuales y por qué?