Is the PIMPL idiom really used in practice?

I am reading the book “Exceptional C++” by Herb Sutter, and in that book I have learned about the PIMPL idiom. Basically, the idea is to create a structure for the private objects of a class and dynamically allocate them to decrease the compilation time (and also hide the private implementations in a better manner).

For example:

class X
{
private:
  C c;
  D d;
} ;

could be changed to:

class X
{
private:
  struct XImpl;
  XImpl* pImpl;
};

and, in the .cpp file, the definition:

struct X::XImpl
{
  C c;
  D d;
};

This seems pretty interesting, but I have never seen this kind of approach before, neither in the companies I have worked, nor in open source projects that I’ve seen the source code. So, I am wondering whether this technique is really used in practice.

Should I use it everywhere, or with caution? And is this technique recommended to be used in embedded systems (where the performance is very important)?

1Best Answer
12

Leave a Comment