Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7182753
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 28, 20262026-05-28T17:50:14+00:00 2026-05-28T17:50:14+00:00

I am reading the book "Exceptional C++" by Herb Sutter, and in that book

  • 0

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)?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-28T17:50:15+00:00Added an answer on May 28, 2026 at 5:50 pm

    So, I am wondering it this technique is really used in practice? Should I use it everywhere, or with caution?

    Of course it is used. I use it in my project, in almost every class.


    Reasons for using the PIMPL idiom:

    Binary compatibility

    When you’re developing a library, you can add/modify fields to XImpl without breaking the binary compatibility with your client (which would mean crashes!). Since the binary layout of X class doesn’t change when you add new fields to Ximpl class, it is safe to add new functionality to the library in minor versions updates.

    Of course, you can also add new public/private non-virtual methods to X/XImpl without breaking the binary compatibility, but that’s on par with the standard header/implementation technique.

    Data hiding

    If you’re developing a library, especially a proprietary one, it might be desirable not to disclose what other libraries / implementation techniques were used to implement the public interface of your library. Either because of Intellectual Property issues, or because you believe that users might be tempted to take dangerous assumptions about the implementation or just break the encapsulation by using terrible casting tricks. PIMPL solves/mitigates that.

    Compilation time

    Compilation time is decreased, since only the source (implementation) file of X needs to be rebuilt when you add/remove fields and/or methods to the XImpl class (which maps to adding private fields/methods in the standard technique). In practice, it’s a common operation.

    With the standard header/implementation technique (without PIMPL), when you add a new field to X, every client that ever allocates X (either on stack, or on heap) needs to be recompiled, because it must adjust the size of the allocation. Well, every client that doesn’t ever allocate X also need to be recompiled, but it’s just overhead (the resulting code on the client side will be the same).

    What is more, with the standard header/implementation separation XClient1.cpp needs to be recompiled even when a private method X::foo() was added to X and X.h changed, even though XClient1.cpp can’t possibly call this method for encapsulation reasons! Like above, it’s pure overhead and is related with how real-life C++ build systems work.

    Of course, recompilation is not needed when you just modify the implementation of the methods (because you don’t touch the header), but that’s on par with the standard header/implementation technique.


    Is this technique recommended to be used in embedded systems (where the performance is very important)?

    That depends on how powerful your target is. However the only answer to this question is: measure and evaluate what you gain and lose. Also, take into consideration that if you’re not publishing a library meant to be used in embedded systems by your clients, only the compilation time advantage applies!

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am reading book called C++ coding standard By Herb Sutter, Andrei Alexandrescu and
I am reading a book about Java and it says that you can declare
I have been reading a book and encountered a statement, that generics allow the
After reading a book on LINQ I'm thinking about re-writing a mapper class that
Recently, I was reading book about Erlang which has hot deployment feature. The deployment
Reading a book I have found the following statement: (Object) Behaviors answer either of
While reading a book about JavaScript I stumbled across an example: var names =
I am reading a book for Java that I am trying to learn, and
I just finished reading a book on scala. What strikes me is that every
I have been reading about the kernel using timers for thread synchronization. I haven't

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.