Вы не хотите передачи права собственности, поэтому приведите только указатель:
auto& banana = dynamic_cast<Banana&>(*product[0]);
auto c = b->color;
dynamic_cast
можно заменить на static_cast
, если вы действительно уверены, что Fruit
действительно Banana
.В случае, если вы ошибаетесь, static_cast
приведет к UB, тогда как вы можете проверить достоверность с помощью dynamic_cast
(исключение - приведение к ссылке или нулевой указатель с приведением к указателю).