我正在编写自己的Python模块,需要一些建议。让我们考虑一个模块中的示例函数:
PyObject* my_func(PyObject *self, PyObject* args)
{
PyObject* returnObj;
try
{
returnObj = my_create_output();
}
catch(const std::exception& ex)
{
PyErr_SetString(PyExc_Exception, ex.what());
returnObj = NULL;
}
return returnObj;
}
my_create_output
函数可以引发不同的异常(也是我自己的异常)。 returnObj
是一个很大的结构(例如,列表),当{1}}函数已经创建了一半输出时,my_create_output
函数可能会引发异常。对于这种情况,我应该如何删除catch
块中的已分配对象?
答案 0 :(得分:2)
my_create_output
应该处理在异常情况下它创建的所有内容的释放,因为捕获异常的调用者无法访问任何异常。