Qt Software / [Перевод] Неявный и явный совместный доступ к данным в Qt

Шаблон проектирования приспособленец

Приспособленец – это объект, который минимизирует использование памяти благодаря совместному использованию части данных с другими подобными объектами. Qt довольно широко использует этот шаблон, но ссылается на него, как на неявный совместный доступ.

Неявный совместный доступ к данным

Множество классов в Qt (такие как QString, QList, QHash и т.д.) используют неявный совместный доступ к данным, что бы минимизировать используемые ресурсы и операции копирования. Класс, с общими данными, состоит в основном из умного указателя на совместно используемый блок памяти. Вследствие чего, это безопасно и его легко скопировать (поверхностное копирование) и передать в качестве аргумента функции.

Данные, на которые указывает класс, с общими данными, копируются (глубокое копирование) только при двух условиях:

  • Счетчик ссылок больше единицы (есть по крайней мере два экземпляра приспособленцев);
  • Метод пытается произвести запись в совместно используемый блок памяти.

Мы называем такую функциональность копирование при записи.

Рубрика: Habr