¿Es posible pasar clases derivadas por referencia a una función que toma la clase base como parámetro

Di que tenemos una clase base abstractaIBase con métodos virtuales puros (una interfaz).

Entonces derivamosCFoo, CFoo2 de la clase base.

Y tenemos una función que sabe cómo trabajar con IBase.

Foo(IBase *input);

El escenario habitual en estos casos es el siguiente:

IBase *ptr = static_cast<IBase*>(new CFoo("abc"));
Foo(ptr);
delete ptr;

Pero es mejor evitar la administración del puntero, entonces, ¿hay alguna manera de usar referencias en tal escenario?

CFoo inst("abc");
Foo(inst);

dóndeFoo es

Foo(IBase &input);

Respuestas a la pregunta(4)

Su respuesta a la pregunta