the destroy() method cleans the object without removing it from memory, it may not free all the memory used by the object (for example UNIT objects allocate memory when the unit engine create them and release that memory only when the unit engine is destroyed). This method is called by the destructor to destroy the object as well, but the destructor may pass some additional parameters and do some extra work.
In fact it's related to the object model used in TA3D : destroy() only destroy the "object" not the associated "variable" in memory (I hope it's clear, I don't know if I would understand such a sentence
)
PS: hm, I forgot : we tend to use malloc()/free() when we manipulate raw data and new/delete when we manipulate object, but you may find some code where it's not the case because I started TA3D using only malloc/free