Any Tobject descendant has a ClassType reference to its own type, so you can create a copy by simply calling Mycopy := MyClass.ClassType.create.
This does not preserve the data, though.
The easiest way to do that is to derive from TPersistent which has standard possibilities to persist data that can subsequently be read by the copy using the streaming mechanisms provided by Tpersistent.
That works e.g. by making all data access through published properties and the class compiled in {$M+} state. There are other options but that is the easiest one. This is the same mechanism that the IDE uses for storing and loading components but it is not tied to the IDE and can be used everywhere. Object persistance.
This is a deep copy, so after creation, operating on the copy will not affect the original.
You can gather all this and create a function called CopyConstructor...
If that is what you mean to achieve I can write a small example.