Предположим, у меня есть такой класс (упрощенный):
class Foo_p;
class Foo
{
private:
Foo_p *p;
public:
Foo();
/* methods, etc... */
};
Этот класс является частью API. Foo_p - это все приватные части класса, которые не объявлены в самом классе Foo, как обычно, а скорее в отдельном объявленном наперед классе, который используется только базовой реализацией, не видимой снаружи.
Я видел этот паттерн в нескольких проектах, есть ли для него название?
Также, как правильно его использовать (например, безопасность исключений и т.д.)? Где должна находиться фактическая реализация? В классе Foo, как обычно, только используя Foo_p для хранения данных, или в классе Foo_p, а Foo будет просто оберткой?