Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lect09.pdf
Скачиваний:
5
Добавлен:
06.02.2016
Размер:
492.28 Кб
Скачать

Назначение PIMPL

Улучшение повторного использования

Сокрытиеплатформо-зависимой реализации отпользователя

Улучшение бинарной совместимости библиотеки

Сокращение количества экспортируемых символов и повышение скорости загрузки

Значительное снижение времени компиляции

Недостатки PIMPL

Вконструкторахидеструкторах классов, использующих идиому увеличивается количество инструкций по выделению и освобождению памяти

Всеметоды, обращающиеся кзакрытой реализации, вынесенной в отдельный класс, содержат+1 инструкцию вызова метода.

Сучетомуказанных вышенедостатков, следуетизбегать применения PIMPL для классов,объекты которых создаются часто и/иливбольших количествах.

Реализация PIMPL

Чтоможно скрыть с применением идиомы:

толькосокрытые(private иprotected) от внешнего использованияатрибуты

всесокрытыеатрибутыиметоды(нонеполучится сvirtual инелогичносprotected)

всёсодержимое классатогдалишаемся возможностинаследования

Пример (ComplexClass.h)

// ComplexClass.h class CComplexClass{ public:

CComplexClass(); void Foo(); ~CComplexClass();

private:

// класс Impl хранит все закрытые //данные и методы класса CComplexClass class Impl; // Упреждающее объявление

Impl * m_pImpl; };

Пример(ComplexClass.cpp)

// ComplexClass.cpp

class CComplexClass::Impl { public:

void Foo() { //…

}

private: // …

};

Пример(ComplexClass.cpp)

CComplexClass::CComplexClass() :m_pImpl(new Impl())

{

}

CComplexClass::~CComplexClass() { delete m_pImpl;

}

void CComplexClass::Foo(){ m_pImpl->Foo();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]