2012-02-28 2 views
1

다음 코드를 고려하십시오. 생성자를 반환 후 Phonon :: Path and Phonon :: 효과는 파괴 되더라도 계속 작동합니다.

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..."; 
} 

, patheffects이 파괴 될 것이다. 나는 media이 적용된 효과 ( effects[2])로 계속해서 재생되는 것을 알아 챘습니다.

나는 뭔가를 놓쳤다 고 생각합니다. patheffects이 파괴 되더라도 media은 어떻게 계속 진행됩니까? Path::~Path documentation으로

답변

1

는 말한다 :

이 경로에이 참조를 파기합니다. 경로가 유효한 경우 원본 및 싱크 MediaNodes가 경로에 대한 참조를 유지하므로 연결이 끊어지지 않습니다.

즉 경로는 RAII 원칙보다 핸들과 비슷합니다. 연결을 끊으려면 명시 적으로 disconnect()를 호출해야합니다.