请考虑以下代码。
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
如何继续发挥?
答案 0 :(得分:1)
正如Path::~Path documentation所说:
销毁对Path的引用。如果路径有效,则连接不会中断,因为源和接收器MediaNodes仍然保留对路径的引用。
这意味着路径更像是句柄,而不是遵循RAII原则。 你必须明确地调用disconnect()来破坏连接。