Я использую этот фрагмент кода из Qt документации для воспроизведения звуковых файлов в моем приложении (уведомление и т.д.):Как я могу автоматически уничтожить QMediaPlayer?
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QUrl("qrc:/huggle/sounds/" + file));
player->setVolume(100);
player->play();
Это, однако, смотрит на меня, как это собирается течь, так как нет деструктора для медиа-плеера.
Есть ли способ удалить его после того, как он закончит играть неблокируемым способом? Вероятно, привязка некоторых событий будет работать, но неясно, какой из них.
Зачем создавать его на куче в первую очередь? – MrEricSir
@MrEricSir, потому что он находится внутри функции, если я определяю его в стеке, он будет немедленно уничтожен, прежде чем он начнет воспроизводить звук. play() является асинхронной функцией и немедленно возвращается, поэтому объект будет уничтожен при выходе из созданной функции. – Petr
Это не имеет особого смысла - создайте экземпляр внутри класса, в котором он живет, или даже глобального масштаба, если нужно. Это похоже на большую проблему с недопониманием жизненных циклов объектов на C++, чем что-либо конкретное для QMediaPlayer. – MrEricSir