It's OK to call a pure virtual function (through the dynamic dispatch mechanism). That is actually the purpose of pure virtual functions, when you think about it.
I assume that "being called from another class on a gkLogicController
object" actually means through a pointer or reference to gkLogicController
. This must then point/refer to an instance of a class derived from gkLogicController
which does override clone
. It is impossible to create an instance of gkLogicController
itself, as it is still abstract.