(1) Чтобы вызвать конструктор копирования модели, измените конструктор копирования ModelInherit следующим образом:
ModelInherit(const ModelInherit& m): Model(m), j(m.j) {}
(2) Глубокое копирование можно сделать так:
Model(const Model& m): i(m.i), s(0)
{
if(m.s != 0)
this->s = new SomeNewClass(*(m.s));
cout<<"Model Copy ctor invoked"<<endl;
}
И объявить конструктор копирования для SomeNewClass, как показано ниже:
SomeNewClass(const SomeNewClass ©) : a(copy.a)
{
cout<<"SomeNewClass Copy ctor invoked"<<endl;
}
Не забудьте освободить Model::s
в деструкторе, иначе будет утечка памяти:
~Model () { delete this->s; } // it's ok if s = 0