Вот здесь и начинается C++
Контейнеры Qt хранят данные по значению, но сами Qt типы с данными при этом используют метод хранения copy-on-write. Поэтому можно спокойно копировать любые QByteArray или QImage без размножения самих данных и потери скорости.
В случае запихивания класса в контейнер без его копирования не обойтись. Отследить же реальное его уничтожение можно, думаю, при помощи подсчета ссылок. Для этого нужно переопределить конструктор копий и при создании копии увеличивать счетчик, а в деструкторе его уменьшать. Это одна из стандартных идиом C++.
Все это относительно сложно и нельзя ли обойтись без этого?