Phonon :: Path и Phonon :: Effect продолжают работать, даже если они уничтожены - PullRequest
1 голос
/ 28 февраля 2012

Рассмотрим следующий код.

class MainWindow
{
    // ...
    Phonon::MediaObject media;
    Phonon::AudioOutput audio_output;
};

MainWindow::MainWindow() : audio_output(MusicCategory)
{
    //...

    QList<EffectDescription> effects =
                          BackendCapabilities::availableAudioEffects();

    media.setCurrentSource(MediaSource("../test.wma"));
    Path path = createPath(&media, &audio_output);
    Q_ASSERT(path.isValid());

    if (!effects.isEmpty())
    {
        path.insertEffect(effects[2]);
    }

    media.play();

    qDebug() << "Playing...";
}

После возврата конструктора path и effects будут уничтожены.Я заметил, что media продолжает играть даже с примененным эффектом (effects[2]).

Я думаю, что что-то пропустил.Даже если path и effects уничтожены, как media продолжает играть?

1 Ответ

1 голос
/ 29 февраля 2012

Как указано в документации Path :: ~ Path :

Уничтожает эту ссылку на Path.Если путь был действительным, соединение не разрывалось, так как и MediaNodes-источник и приемник по-прежнему сохраняют ссылку на путь.

Это означает, что пути больше похожи на дескрипторы, чем следуют принципам RAII.Вы должны явно вызвать disnect (), чтобы разорвать соединение.

...