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