考虑下面的代码。
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。我已经注意到,即使应用了特效(effects[2]),media仍然可以继续播放。
我想我漏掉了什么。即使path和effects被摧毁,media如何继续发挥作用?
发布于 2012-02-29 06:21:35
正如Path::~Path documentation所说:
会销毁对该路径的引用。如果路径有效,则连接不会断开,因为源和宿MediaNodes仍保留对该路径的引用。
这意味着路径更像句柄,而不是遵循RAII原则。您必须显式地调用disconnect()来销毁连接。
https://stackoverflow.com/questions/9483206
复制相似问题