crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Умные указатели через сигналы.
call_me_Frank
  опции профиля:
сообщение 5.10.2015, 17:07
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 73
Регистрация: 20.10.2010
Пользователь №: 2129

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день, всем-всем.

У меня задача такая: один объект испускает сигнал с указателем на структуру данных SD. У него, допустим, есть десяток получателей, которые могут использовать данные структуры, а могут не использовать. Сколько времени потребуется конкретному получателю на обработку полученных данных - не известно. Но после того, как структуру данных "посмотрели" все получатели, SD должна быть удалена. как это реализовать? и как можно быть уверенным, что все структуры в итоге удалены и память очищена?

Я пока что :rolleyes: не имел сколько-нибудь серьезного дела с умными указателями, но вроде ж они для этого созданы? Нужен совет матерого профи по указанной задаче ))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 6.10.2015, 8:41
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1564
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 211 раз(а)




Репутация:   12  


обычный shared_ptr подойдёт.
вопрос не относится к Qt, переношу его в вопросы по С++.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
JohnZ
  опции профиля:
сообщение 9.10.2015, 20:14
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 131
Регистрация: 19.7.2014
Пользователь №: 4190

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(call_me_Frank @ 5.10.2015, 17:07) *
Добрый день, всем-всем.

У меня задача такая: один объект испускает сигнал с указателем на структуру данных SD. У него, допустим, есть десяток получателей, которые могут использовать данные структуры, а могут не использовать. Сколько времени потребуется конкретному получателю на обработку полученных данных - не известно. Но после того, как структуру данных "посмотрели" все получатели, SD должна быть удалена. как это реализовать? и как можно быть уверенным, что все структуры в итоге удалены и память очищена?

Я пока что :rolleyes: не имел сколько-нибудь серьезного дела с умными указателями, но вроде ж они для этого созданы? Нужен совет матерого профи по указанной задаче ))

Я не матёрый, и не совсем профи, :) но ... Количество получателей известно ?
Если да, то в структуру добавляется поле short, которое перед запуском сигнала == 0.
Каждый обработчик делает ему инкремент, и по достижении заданного числа обработок, т.е. последний обработчик, удаляет структуру, как-то так ...

Сообщение отредактировал JohnZ - 9.10.2015, 20:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 3.11.2015, 12:39
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 108 раз(а)




Репутация:   8  


Цитата
Если да, то в структуру добавляется поле short, которое перед запуском сигнала == 0.
Каждый обработчик делает ему инкремент, и по достижении заданного числа обработок, т.е. последний обработчик, удаляет структуру, как-то так ...

Так и работает shared_ptr :lol:

Только он увеличивает счетчик при копировании, а при удалении уменьшает и удаляет объект когда он становится равным 0.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.5.2018, 1:20