The smart-ass answer is "If you don't know, you don't need it".
The slightly more useful answer is "Whenever you're doing something that isn't managed. Like MemAlloc, or interfacing with other langauges". Also in the old days (not sure whether this has been addressed or not) Streams where notorisly bad at remembering to 'close' themselves, and would often leave 'locked' files on the filesystem or open TCP connections.
What function is called when an object is internaly deleted.
The Delete() method.
Cyclical references is really a bad example, as objects in a cyclic datastructure, never get garbage collected, and thus their Delete() method is never invoked, unless you do so explicitly, in which case it would probably be better to call it something other than Delete(), as changes are it'll crash when invoked a second time by the garbage collector.