PIMPL расшифровывается как Pointer to IMPLementation (Указатель на реализацию). Это паттерн проектирования, который используется в C++ для разделения интерфейса и реализации с целью скрытия деталей реализации и уменьшения зависимости от заголовочных файлов.
🚩Как работает PIMPL?
Вместо того чтобы хранить данные прямо в классе, мы используем указатель на структуру реализации (
Impl). Без PIMPL (проблема: утечка зависимостей)
// File: MyClass.h
#include <string> // Подключаем заголовок, влияет на все файлы
class MyClass {
private:
std::string data; // Прямое хранение данных
public:
MyClass();
void print();
};
С PIMPL (скрываем детали реализации)
// File: MyClass.h
#include <memory>
class MyClass {
private:
struct Impl; // Объявляем, но не определяем
std::unique_ptr<Impl> pImpl; // Умный указатель на реализацию
public:
MyClass(); // Конструктор
~MyClass(); // Деструктор
void print();
};
// File: MyClass.cpp
#include "MyClass.h"
#include <iostream>
#include <string>
// Определяем реализацию
struct MyClass::Impl {
std::string data = "Hello, PIMPL!";
void print() { std::cout << data << std::endl; }
};
// Реализация методов
MyClass::MyClass() : pImpl(std::make_unique<Impl>()) {}
MyClass::~MyClass() = default;
void MyClass::print() { pImpl->print(); }
Ставь 👍 и забирай 📚 Базу знаний