C++ · Intermediário · Inglês · Técnico
pimpl
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.