A needs a virtual destructor, and probably protected default and copy constructors.