【发布时间】:2019-06-06 03:14:59
【问题描述】:
我正在尝试创建 C++ 类来封装 Vulkan 初始化过程(在非常基础的层面上,我仍在学习),而我的设置方式需要将 vulkan 设备传递给显式“销毁”进行清理的功能。我将所有初始化都包含在 try-catch 块中;问题是如果在初始化期间抛出异常,对象将被销毁,我无法调用我的“销毁”函数。
在伪代码中:
try{
DeviceObject device; // constructor initializes
SomeResource resource(device);
OtherResource other(device); // suppose an exception is thrown here
while(programRuns){
// do something
}
// end of program
other.destroy(device);
resource.destroy(device);
device.destroy();
}
catch (myException e){
showError(e);
}
在这种情况下,如果在运行时抛出异常,我的销毁函数不会被调用,它们只会在程序成功终止后被调用。
我已经想到了几种不同的设置方法来处理这种情况并确保明确清理资源,但我的问题是:我必须这样做吗?我知道我“应该”,但是如果程序崩溃并退出,操作系统会处理清理我创建的资源,还是会在系统 GPU(或类似的东西)上留下挂起的垃圾?
【问题讨论】: