TGViewer
C/C++ | Вопросы собесов C/C++ | Вопросы собесов @easy_c_plus · 4.19K subscribers
Post #2574 267
🤔 Расшифруйте аббревиатуру PIMPL?

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(); }


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
More from @easy_c_plus
  1. Oct 16, 2026🤔 В чем особенность выброса исключений в конструкторе и деструкторе? Если исключение выбр…
  2. Oct 15, 2026🤔 В set сложность вставки, удаления, поиска - логарифмическая? Да, в стандартной реализац…
  3. Oct 15, 2026🤔 Как убедиться что нет багов в коде? Чтобы убедиться, что в коде нет багов, используют р…
  4. Oct 14, 2026🤔 Какая польза от безымянного пространства имен? Безымянное пространство имен используетс…
  5. Oct 14, 2026🤔 Сколько занимает места объект пустого класса? Объект пустого класса не может иметь нуле…
  6. Oct 13, 2026🤔 Как устроена хеш-таблица в unordered_map? В unordered_map используется хеш-таблица с це…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →