I rarely use it, and only in specific situations. It is primarily useful in cases where you have many-to-one relationships in your class/object hierarchy, and it does incur a small bit of overhead, so I avoid it in most cases where it wouldn't help anyway, sticking with explicit freeing instead.

If you are planning to implement it throughout your game engine, I'd recommend doing a fairly thorough cost/benefit analysis to see if it would be a good idea or not.