No, there is no way in C++ to create an object of the same type when just having a base class pointer to a similar object.
This is what is usually done by a so-called factory function or class. In the cpp file that implements your derived class's object you could for example implement a function
MyObject* MyObjectFactory()
{
return new MyObject;
}
and pass along a pointer to this function to places that want to create such objects.
Google the concept of
Factory and you will find plenty of good examples how it is done.
Another approach is to implement a virtual function in the base class for creating objects of same type. Then override that function in each of your derived classes to create the proper type of object. This is in fact also kind of a factory mechanism.