The reason is simple : VideoResource is not meant to be used publicly, so only derived classes should have access to the constructors and destructor.
I can't see any reason to store your variables as VideoResource*, as it doesn't expose any function (using void* wouldn't be worse in this case...). If you do so, you'll have to downcast an instance each time you want to do something with it, which is a very bad design.