Задача — создать клон экземпляра произвольного класса-наследника базового класса.
Сейчас клонирование реализовано на уровне базового класса, втупую:
void CControl::Assign(CControl* source)
{
if (typeid(*this) != typeid(*source))
return;
memcpy(this, source, source->size_of);
//cut
}
Однако возникла необходимость в нескольких наследниках добавить члены типа wstring. В этом случае использование memcpy() гарантирует множество приятных впечатлений, разумеется.
Вопрос: как можно реализовать выборочное клонирование, учитывающее наличие в членах класса сложных вещей типа wstring, ну или хотя бы указателей на уже инициализированные структуры данных?
Очень, очень хочется обойтись без поэлементного копирования — классов-наследников в проекте порядка пятидесяти и все они довольно толстые.