So when trying to get in touch with the
PIMPL idiom one finds two common ways of doing it:
Using forward declaration outside a class:
Using forward declaration inside a class:
// *.cpp file:
Two questions here:
You may do a forward declaration within class scope. So the second example is absolutely correct.
The main plus of second example is that your
PimplClass can't be accessed from anywhere but from
VisibleClass because it is declared (forward-declared) inside it's private section.
It's a forward-declaration too, but
PimplClass is scoped inside
That second solution has the advantage of not dumping an internal type into the global namespace. Keeping
PimplClass scoped inside
VisibleClass makes complete sense.
In both cases, the Pimpl idiom should generally use a
std::unique_ptr to tie the lifetimes of the interface and the Impl together, rather than a raw owning pointer.