Как вы говорите, вы должны копировать их, а не просто указатель. Таким образом, либо B уже реализовал метод «клонирования», либо вам нужно реализовать какой-то внешний B* copy(B* b)
, который создаст новый B с таким же состоянием.
В случае, если B реализовал конструктор копирования, вы можете реализовать копирование как
B* copyOf(B* b)
{
return new B(*b);
}
В случае, если B реализовал метод клонирования или аналогичный , вы можете реализовать копирование как
B* copyOf(B* b)
{
return b->clone();
}
и тогда ваш код будет выглядеть как
int main()
{
B *b = SomeLib();
A a(copyOf(b));
delete b;
...
}