Хочется получить новый объект идентичный начальному, который я смогу изменять не трогая данный, проблема в том, что я заранее не знаю тип этого объекта.
Уточните вопрос. В каком смысле не знаете тип? Он известен статически, но может быть любым? Или статически неизвестен (т.е. например имеете дело с потомками некоего класса, или вообще с неизвестным типом)?
Проблема с этим подходом это возможность иметь объект производного класса доступный по через указатель на базовый. Если воспользоваться вашим предложением, будет создан объект базового класса, а не производного (slicing)
Я не знаю заранее тип объекта, хотелось бы как-то void* через reinterpret_cast привести к типу объекта и потом вызвать конструктор копирования объекта. Да вот только как получить тип объекта по указателю =/