Умные указатели, создание в цикле или что использовать вместо них?
====================================================================

 Приветствую!  

В общем предыстория:  

В отдельном потоке в цикле создаю класс, генерирую сигнал (Qt emit ....), в параметрах сигнала указатель на этот класс,  

на этот сигнал подписаны несколько слотов в нескольких разных потоках.  

Что бы не освобождать потом ресурсы вручную (после того, как все слоты отработают) решил использовать умные указатели.  

В данный момент QSharedPointer.   

После перехода появился неимоверно трудно уловимый баг, а именно выжирание памяти (если перейти обратно, то всё ок).  

Причём может день нормально отработать, а потом начать подъедать оперативку.  
  

Когда-то давно, то ли в доках, то ли на форумах слышал упоминание, что умные указатели не стоит использовать в циклах.   

Чисто теоретически, почему и так ли это?  
  

Если это так, то как тогда лучше освободить ресурсы, если заранее не известно сколько слотов будут подписаны на сигнал и темболее кто из слотов подпишется последним (что бы в нём освободить)? 

> Когда-то давно, то ли в доках, то ли на форумах слышал упоминание, что умные указатели не стоит использовать в циклах.   
> 
> Чисто теоретически, почему и так ли это?

  

Не вижу никаких преград для использования в циклах.  
  

> Если это так, то как тогда лучше освободить ресурсы, если заранее не известно сколько слотов будут подписаны на сигнал и тем более кто из слотов подпишется последним (что бы в нём освободить)?

  

SharedPointer должен сам освобождать ресурсы, когда счётчик ссылок упадёт до нуля. Вы не должны это контролировать в обычном случае (а если надо, но тогда уже используйте интрузивные указатели).  

Проверьте, нет ли циклических ссылок. Погоняйте программу с анализаторами памяти, Valgrind, например.