C++ 何时使用释放方法?
我正在创建一个“混音器”应用程序,用于控制音频会话和端点的音量。我的问题是,在C++ 何时使用释放方法?,c++,winapi,mixer,C++,Winapi,Mixer,我正在创建一个“混音器”应用程序,用于控制音频会话和端点的音量。我的问题是,在IMMDevice上调用Release方法是否会使以前获取的IAudioEndpointVolume引用无效?在我的程序中,它看起来像这样: IMMDevice *device; IMMDeviceEnumerator *deviceEnumerator; IMMDeviceCollection *deviceCollection; IAudioEndpointVolume *audioEndpoint; ... /
IMMDevice
上调用Release
方法是否会使以前获取的IAudioEndpointVolume
引用无效?在我的程序中,它看起来像这样:
IMMDevice *device;
IMMDeviceEnumerator *deviceEnumerator;
IMMDeviceCollection *deviceCollection;
IAudioEndpointVolume *audioEndpoint;
... // Initializing device, deviceEnumerator and deviceCollection
// for cycle {
...
deviceCollection->Item(i, &device);
device->Activate(IID_IAudioEndpointVolume, CLSCTX_ALL, NULL, (void**)&audioEndpoint);
device->Release(); // Will this cause UB in the next line?
audioEndpoint->GetMasterVolume(&volume);
...
//}
我应该使用这样的发布方法还是在发布<代码> AudioEndot?< /P>我建议使用微软来使用C++中的Winapi。它有RAII句柄、错误代码到异常转换以及一些其他小工具。@IInspectable它不回答这个问题,但仍然会有帮助,这就是为什么我对它做了评论而不是回答:)@IInspectable否,但是我建议C++中使用C风格的资源管理来代替C++资源管理。这与理解上述管理是如何实现的是完全正交的,所以我不确定你的观点到底是什么。理论上,你可以(必须)在需要时调用Release。在实践中,我看到一些(罕见的)写得不好的对象崩溃,因为它们内部存在一些层次结构的ref问题。