The thing is, that while it may work, it's not really C++ -- it's more like C. If you're going to have type safety, then why not use it? There's no need to use void in C++, since we have templates. Just use T and allocate that with new.
I don't really see why not? There's absolutely no reason (unless you're storing lots of different objects inside one container, in which case you need to be careful) not to.
I tried to do that once. It wasn't very flexible and you'll have to be able to remember the type or the user of the class has to cast it once it gets its pointer.
In either case, it is to be avoided, if possible.
So do answer, because I'm not really sure. Are you storing multiple objects in one container or just one?