Thanks guys, it looks like it was just a case of FlushMem scope. Although I was calling it in the main loop, right after flip, the main loop is housed in a "master" type called game which controls everything else. I've made a new main loop which calls the old main loop and moved FlushMem from the old one to the new one and things are being deleted now.
Tony: Right. when I said global type list, I meant a type list stored in a global type variable. I remove all the entries from the list when destroying them.
Tony: Right. when I said global type list, I meant a type list stored in a global type variable. I remove all the entries from the list when destroying them.