Почему следует использовать идиому «PIMPL»? [Дубликат]
На этот вопрос уже есть ответ:
Используется ли на практике идиома pImpl? 11 ответовBackgrounder:
The PIMPL Идиома (Указатель на IMPLementation) - это метод для сокрытия реализации, в котором публичный класс оборачивает структуру или класс, который нельзя увидеть вне библиотеки, частью которой является публичный класс.
Это скрывает внутренние детали реализации и данные от пользователя библиотеки.
При реализации этой идиомы зачем размещать открытые методы в классе pimpl, а не в публичном классе, поскольку реализации метода открытых классов будут скомпилированы в библиотеку, а у пользователя будет только заголовочный файл?
Чтобы проиллюстрировать, этот код ставитPurr()
реализация класса impl и его обертка.
Почему бы не реализовать мурлыканье непосредственно в открытом классе?
// header file:
class Cat {
private:
class CatImpl; // Not defined here
CatImpl *cat_; // Handle
public:
Cat(); // Constructor
~Cat(); // Destructor
// Other operations...
Purr();
};
// CPP file:
#include "cat.h"
class Cat::CatImpl {
Purr();
... // The actual implementation can be anything
};
Cat::Cat() {
cat_ = new CatImpl;
}
Cat::~Cat() {
delete cat_;
}
Cat::Purr(){ cat_->Purr(); }
CatImpl::Purr(){
printf("purrrrrr");
}