When should I do $cast with .clone() or not?

In reply to malathi@aceic.com:

Hence you have to call clone method using $cast.

I think you have this reversed. A $cast is needed when using clone() with derived types, but clone() is optional when using $cast. The original question was when to use that option.