Glib::RefPtr
- это интеллектуальный указатель с подсчетом ссылок, который предшествует std::shared_ptr
и выполняет те же основные функции.Вариант использования для него аналогичен - он позволяет нескольким объектам совместно использовать права собственности на объект, не зная друг о друге напрямую.
В ваших конкретных примерах значок может быть общим, потому что он используется в нескольких местах в пользовательском интерфейсе, и вы не хотите хранить много копий одних и тех же данных изображения, которые могут использовать значительную частьпамяти, если имеется много значков.
Объекты Application
и Builder
, вероятно, удерживаются несколькими объектами в вашей программе (например, различными объектами окна или диалогового окна), поэтому подсчет ссылок сохраняет каждый из них живымкак один из этих объектов все еще использует его.Это освобождает этих пользователей объекта Application
от необходимости знать обо всех других частях программы, которые могут использовать общий объект Application
.Когда одно окно завершается с Application
, оно уничтожает свой умный указатель на Application
.Если это окно было последним владельцем, это также уничтожает объект Application
, но в противном случае оно остается в живых для других пользователей - и все это без вашего разрушенного окна, зная об этом, живет ли Application
или нет.