资源管理设计模式
Resource Management Design Patterns
各种API都需要调用初始化和终结方法。最近,我在使用Python C++API时遇到了这一点,其中所有API调用都必须介于对Py_Initialize
和Py_FinalizeEx
的调用之间。我目前的解决方案是将这样的调用放在主方法的开头和结尾。这似乎并不理想,因为它将API的实际使用与其资源管理分离开来。也就是说,进行API调用的软件组件依赖于主方法来获取和销毁资源。
有没有一种模式通常适用于这种情况?
以下是我目前正在做的事情。
int redirected(int argc, char *argv[]) {
// Actual main method
return 0;
}
int main(int argc, char *argv[]) {
auto program = Py_DecodeLocale(argv[0], NULL);
if (program)
Py_SetProgramName(program);
else
throw new std::runtime_error("Py_SetProgramName");
Py_Initialize();
int errc = redirected(argc, argv);
if (Py_FinalizeEx() < 0)
throw new std::runtime_error("Py_FinalizeEx");
PyMem_RawFree(program);
return errc;
}
C++中正确的模式是使用RAII。事实上,这是一个非常好的问题。
这意味着对象的构造函数将获取资源,析构函数将释放它。这样可以确保在超出范围时总是释放资源。
对于Python,它将是:
class PyInit
{
public:
PyInit() {Py_Initialize();}
~PyInit() {Py_Finalize();}
}
然后主要是:
int main()
{
PyInit pyinit;
// using Python interpreter
return 0;
}
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何维护资源管理器项目视图中当前可见的项目列表
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 编译器资源管理器和 GCC 具有不同的输出
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- Windows 资源管理器中的图标在使用 resource.rc 时显示 2 个不同的图标
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- 适合事件管理的设计模式
- 关于多态性和资源管理的程序设计
- 资源管理器在 TILE 视图模式下不显示 shell 命名空间扩展的项目详细信息
- 模板中的错误可能是错误的设计资源管理器
- GUI软件设计模式,用于在运行时管理多个小部件
- 动画管理器设计模式
- 资源和工厂设计模式薄弱