Ok, also I think this is your problem.  It should be

    virtual void ScopesGeneric *clone(ScopesGeneric *) = 0;

Then in your specific implementations it should create a new object of the given type and copy over all the parameters.  There is a concept of deep versus shallow clones if some of those parameters are themselves objects.  A deep clone creates clones of all the lower objects.  A shallow clone only copies the first object and they will point at the same lower objects.