Why use interface instead of pimpl
The opaque pointer (pimpl) idiom has been inherited from C language where it is used to encapsulate implementation details. However, both old-school and "modern" C++ dispense you from writing some ugly code, and allow to use interfaces with object factories.
The example of implementation with both pimpl and interface approach …