Что это за шаблон проектирования? Как его использовать?

Предположим, у меня есть такой класс (упрощенный):

class Foo_p;
class Foo
{
private:
  Foo_p *p;
public:
  Foo();
  /* methods, etc... */
};

Этот класс является частью API. Foo_p - это все приватные части класса, которые не объявлены в самом классе Foo, как обычно, а скорее в отдельном объявленном наперед классе, который используется только базовой реализацией, не видимой снаружи.

Я видел этот паттерн в нескольких проектах, есть ли для него название?

Также, как правильно его использовать (например, безопасность исключений и т.д.)? Где должна находиться фактическая реализация? В классе Foo, как обычно, только используя Foo_p для хранения данных, или в классе Foo_p, а Foo будет просто оберткой?

11
задан Travis Northcutt 31 January 2012 в 22:25
поделиться