So when I free an object, Events can still call none-existing handlers..
You're confusing the RTLEvent, which is basically just a signal, with "normal" control events: there are no "handlers" for a RTLEvent, just an opaque pointer and some functions to deal with it.
From the application's point of view all
RTLEventCreate does is something or other which returns an explicit pointer. That pointer is stored in a class field, but it may as welll be stored in a unit var or elsewhere. When you destroythe class, the pointer
field is no longer accessible, but unitl you call
RTLEventDestroy the RTLEvent's state is still valid and can still be accessed if you happened to store a copy of the pointer somewhere else.
Of course, if you didn't store a copy and you didn't call RTLEventDestroy before destroying the object, there is a memory leak and, maybe, some other resources locked, but nothing more serious than that