void init() {
Derived n;
*baseId = n;
}
Помимо того, что заметил Нил, производная n
является локальной для вашей функции инициализации.Он «умирает», когда вы выходите из функции, поэтому, даже если вы его правильно присвоили, он не будет работать.
То, что вы хотите, это не назначение в стеке, а в куче:
void init() {
baseId = new Derived();
}
или даже лучше:
void init() {
delete baseId;
baseId = new Derived();
}
и пара деструктор и конструктор, чтобы предотвратитьпроблемы:
Foo() : baseId(0) {};
~Foo() { delete baseId; }
При использовании этого метода обязательно либо block скопируйте конструктор и оператор присваивания, либо реализуйте их правильно.Однако для их реализации вам нужно будет также выполнить копирование Derived - или лучше: используйте безопасный shared_ptr для хранения указателя.