Один из способов сделать это - добавить это в ваш класс Command:
public:
virtual Command * Clone() const = 0;
... а затем в различных подклассах Command реализовать Clone (), чтобы вернуть копию объекта:
public:
virtual Command * Clone() const {return new MyCommandSubclass(*this);}
Как только это будет сделано, вы можете сделать то, что вы хотите, как это:
Command * copiedCommand = commandImplementation->Clone();