Your allocation method - malloc + cast - may work for simple classes but overall it's a serious no-no; think you should either be using new/delete, or, if sticking with malloc /free, use placement new and an explicit destructor call respectively.
I didn't supposed that anything really meaningful can come...
I wonder if placement new would run into the same linker problem that the article mentions -- I'll have to try it at some point :)