Russian Qt Forum
Ноябрь 24, 2024, 20:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3] 4   Вниз
  Печать  
Автор Тема: Причины утечки памяти и способы борьбы с ними  (Прочитано 26168 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #30 : Февраль 16, 2014, 00:00 »

так может уж лучше тогда тему-статью-туториал? Подмигивающий думаю не мне одному будет интересно.
Вот не умею я нормально писать. Давайте лучше это обсуждать в этой теме, например.
На самом деле, начать ими пользоваться очень легко с запуском нового проекта: просто берете и начинаете везде вместо обычных указателей использовать shared_ptr (не допуская циклических ссылок). Улыбающийся

Писал, писал... какая то фигня получается... Улыбающийся Лучше будем обсуждать конкретные моменты. Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #31 : Февраль 16, 2014, 00:18 »

если бы не было распространенных реализаций, вы бы сделали свою.
Так и делал... Улыбающийся В середине 90-х, шаблонов у меня в компиляторе еще не было (BC 3.1), и в каждый класс, у которого хотелось иметь такой функционал, подмешивал класс со счетчиком и методами attach/detach. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #32 : Февраль 16, 2014, 11:10 »

Или вы хотели бы что бы он в боевом коде всех сохранял?
И это тоже бы хотел. Пример: N разнотипных объектов использует шареный ресурс, напр картинку. Все хорошо, как только все N будут удалены - и ресурс будет удален/выгружен. Но вот пользователь выбрал из меню "отключить картинки" - что делать? Как мне найти всех пользователей ресурса и сказать им "освобождай"?

А так да - экономит delete, удобно отдать в асинхронный вызов, и.т.п. с этим никто не спорит. Но каких-то больших результатов от "умности указателей" ожидать не стоит.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #33 : Февраль 16, 2014, 11:22 »

Но вот пользователь выбрал из меню "отключить картинки" - что делать? Как мне найти всех пользователей ресурса и сказать им "освобождай"?
Вы пытаетесь навязать дополнительный функционал указателю, который никак не связанный с его задачами. Вы часто пытетесь объединять разные задачи в одной сущности. Из этого никогда ничего хорошего не получиться.

А так да - экономит delete, удобно отдать в асинхронный вызов, и.т.п. с этим никто не спорит.
Это одни из простейшитх задач, которые он ришает.

Но каких-то больших результатов от "умности указателей" ожидать не стоит.
Так никто и не ждет. Это просто указатель. Улыбающийся
Записан
Akon
Гость
« Ответ #34 : Февраль 16, 2014, 11:44 »

Цитировать
И это тоже бы хотел. Пример: N разнотипных объектов использует шареный ресурс, напр картинку. Все хорошо, как только все N будут удалены - и ресурс будет удален/выгружен. Но вот пользователь выбрал из меню "отключить картинки" - что делать? Как мне найти всех пользователей ресурса и сказать им "освобождай"?
Это действительно никак не связано с смартами. Используйте контейнер со смартами под каждый ресурс. Отключили картинки - очистили контейнер.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #35 : Февраль 16, 2014, 12:55 »

Вы пытаетесь навязать дополнительный функционал указателю, который никак не связанный с его задачами.
Это действительно никак не связано с смартами.
Но ведь только что (пока не было этого противного требования "отключить" извне) все прекрасно вписывалось - завел в каждом классе умный указатель, и все! Только вот
Цитировать
этот редиска на первом скачке расколется
И придется возвращаться к тем самым attach/detach  Улыбающийся

Используйте контейнер со смартами под каждый ресурс. Отключили картинки - очистили контейнер.
Не понял, если можно - подробнее. Напр как тогда рулить с точки зрения одного объекта (клиента)?
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #36 : Февраль 16, 2014, 14:08 »

Пример: N разнотипных объектов использует шареный ресурс, напр картинку. Все хорошо, как только все N будут удалены - и ресурс будет удален/выгружен. Но вот пользователь выбрал из меню "отключить картинки" - что делать? Как мне найти всех пользователей ресурса и сказать им "освобождай"?
Использовать текучие указатели в паре с умными.

Записан
Bepec
Гость
« Ответ #37 : Февраль 16, 2014, 14:47 »

Умные указатели иногда выгодно использовать в "стандартных" реализациях. В остальных случаях лучше простые. Соединить две разные библиотеки, построенные на умных и простых указателях можно, но необходимо досконально знать и ту и ту библиотеку.

Это инструмент. Можно использовать эффективно и в нужной программе, а можно "микроскопом гвозди забивать".
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #38 : Февраль 16, 2014, 14:48 »

Но ведь только что (пока не было этого противного требования "отключить" извне) все прекрасно вписывалось - завел в каждом классе умный указатель, и все!
Конечно вписывалось, от него требовалось владеть объектом - он с этим прекрасно справлялся. Вы захотели, что бы он еще что-то помнил, но увы, без дополнительных телодвижений он  этого не сможет, не закладывали в него этих способностей изначально (слава Богу).
Также он не сможет загружать контент с сайта, считать логарифмы и сохранять свое состояние в базу данных. Но он превосходно справится со своей непосредственной задачей.

Не понял, если можно - подробнее. Напр как тогда рулить с точки зрения одного объекта (клиента)?
Посылайте сигнал/event всем объекта, при получении которого они забудут ресурс. Как только они все это сделают, ресурс разрушится.
« Последнее редактирование: Февраль 16, 2014, 14:55 от Old » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #39 : Февраль 16, 2014, 15:19 »

В остальных случаях лучше простые.
Тут нужно уточнять, кому лучше. Вам? Ну хорошо. Для меня простые указатели хуже. Улыбающийся

Это инструмент. Можно использовать эффективно и в нужной программе, а можно "микроскопом гвозди забивать".
Это обычный указатель, не нужно его использовать в "нужной программе". Он хорош во всех программах. Улыбающийся
Записан
Bepec
Гость
« Ответ #40 : Февраль 16, 2014, 15:27 »

Я привёл пример - попробуйте скрестить библиотеку с простыми указателями и библиотеку с умными. И не простую динамическую dll, а полноценную библиотеку с взаимодействием.

PS это хорошо когда все и вся использует умные. Если что-то использует простые, вся схема рушится Веселый
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #41 : Февраль 16, 2014, 15:34 »

PS это хорошо когда все и вся использует умные. Если что-то использует простые, вся схема рушится Веселый
Я выше это писал.
Если библиотека действительно ценна для проекта, то ее интерфейс закрывается фасадом с умными указателями и дальше все гармонично взаимодействует. А вот если вам лень это делать и обычные указатели из этой библиотеки лезут во все места проекта, то... наверное этот проект не очень важен или у вас много свободного времени на отслеживание всех этих указателей. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #42 : Февраль 16, 2014, 16:41 »

Конечно вписывалось, от него требовалось владеть объектом - он с этим прекрасно справлялся. Вы захотели, что бы он еще что-то помнил, но увы, без дополнительных телодвижений он  этого не сможет, не закладывали в него этих способностей изначально (слава Богу).
Также он не сможет загружать контент с сайта, считать логарифмы и сохранять свое состояние в базу данных. Но он превосходно справится со своей непосредственной задачей.
Так я же и не возражаю, а просто привожу пример как "умность" оказывается очень короткой. И таких примеров много

Посылайте сигнал/event всем объекта, при получении которого они забудут ресурс. Как только они все это сделают, ресурс разрушится.
А каким "всем"? Откуда я их возьму/узнаю? И что послать? Нужно делать какой-то интерфейс понимаемый многими объектами  Плачущий Да и в событийной схеме это проблемно.

Что мне не нравится во всех этих "умных" - что они берут на себя удаление. Схема "умный ресурс" гораздо мощнее, он также может удалить себя если нет клиентов, но + многое другое. А на стороне клиента возможности очень бедные.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #43 : Февраль 16, 2014, 16:49 »

просто привожу пример как "умность" оказывается очень короткой. И таких примеров много
Да, я выше писал, они контент с сайта получать не умеют, сохранять свои состояния в базе данных тоже, даже логарифм посчитать не могут. И кто назвал их умными?

А каким "всем"? Откуда я их возьму/узнаю?
А вы их храните где-то. Вы только что хотели, что бы их хранили указатели, они не могут... значит их придется хранить вам.

Да и в событийной схеме это проблемно.
В событийной схеме послать событие проблемно? Что то вы с ней не то делаете.

Схема "умный ресурс" гораздо мощнее, он также может удалить себя если нет клиентов, но + многое другое. А на стороне клиента возможности очень бедные.
Ну так умный указатель это маленький винтик, с помощью которого легко сделать "умный ресурс" и даже "очень умный ресурс".
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #44 : Февраль 16, 2014, 17:22 »

А вы их храните где-то. Вы только что хотели, что бы их хранили указатели, они не могут... значит их придется хранить вам.
Придется - так придется. Но у меня одно число указателей, а у каждого "умника" свое число ссылок, нехорошо, не по уму иметь 2 копии данных.

В событийной схеме послать событие проблемно? Что то вы с ней не то делаете.
Послать-то без проблем, но никто не обещал что в очереди не появится событие которое опять вызовет захват того же ресурса.

Ну так умный указатель это маленький винтик, с помощью которого легко сделать "умный ресурс" и даже "очень умный ресурс".
Это интересно обсудить, может создадим тему?
Записан
Страниц: 1 2 [3] 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.152 секунд. Запросов: 23.