1. What is the Pimpl Idiom, and why is it useful?
2. What is the best way to express the basic Pimpl Idiom in C++11?
3. What parts of the class should go into the impl object? Some potential options include:
- put all private data (but not functions) into impl;
- put all private members into impl;
- put all private and protected members into impl;
- put all private nonvirtual members into impl;
- put everything into impl, and write the public class itself as only the public interface, each implemented as a simple forwarding function (a handle/body variant).
What are the advantages/drawbacks of each? How would you choose among them?
4. Does the impl require a back pointer to the public object? If yes, what is the best way to provide it? If not, why not?