struct A {
int val;
virtual ~A() = 0; // so nobody can instantiate A alone.
};
inline
A::~A() = default; // the destructor HAS to be defined.
struct foo {
int x;
int y;
std::unique_ptr<A> derived;
};
А затем все остальное - то же самое ... и с использованием:
foo foo_v; foo_v.derived = std::make_unique<B>();
Обратите внимание, что я исключил элементы языка C и сделал его чистым C ++. Я также убрал бы их и сделал бы их более связными. Имеет ли смысл, что x и y неинициализированы в приведенном выше коде? Вероятно, нет, поэтому должен существовать конструктор, который заставляет их указывать, устанавливает для них начальное значение или оба.