ExpertiDict

C++ · Intermediário · Inglês · Técnico

pimpl

ˈpɪm.pəlsubstantivo

Idioma que esconde os detalhes privados de uma classe atrás de um ponteiro para uma estrutura definida só no .cpp. O header fica estável e a recompilação diminui.

Onde usar

Usado em bibliotecas para manter a ABI estável e reduzir o tempo de compilação, já que mudar a implementação não obriga a recompilar quem inclui o header. Custa uma alocação e uma indireção.

Em código

class Widget {
public:
  Widget();
  ~Widget();  // definido no .cpp
private:
  struct Impl;
  std::unique_ptr<Impl> p_;
};

Exemplos

We use pimpl so the header doesn't expose the internals.

Usamos pimpl para o header não expor os detalhes internos.

Define the destructor in the cpp file, pimpl needs the full type.

Defina o destrutor no cpp, o pimpl precisa do tipo completo.

Cuidado

Com unique_ptr para tipo incompleto, o destrutor precisa ser declarado no header e definido no .cpp, onde o tipo já é completo.

Sinônimos

ponteiro para implementação

Origem

De pointer to implementation, ponteiro para a implementação.

Veja também

Todos os termos de C++