我们有一个调用许多 C++ 模块的大型 Fortran 应用程序。我正在尝试使用 C++ 对象的析构函数来释放资源和关闭文件,但是当 Fortran 程序退出时它们似乎没有被调用。
Fortran 程序使用 STOP
命令退出。
我是否需要使用不同的 Fortran 命令退出,或者从 Fortran 调用 C++ exit(0)
命令?
最佳答案
要获得正确的构造/破坏,您只需要入口点位于 C++ 端即可。
至少,我能想到的最简单的方法似乎很可能是这样的:
- 在 C++ 中设置 main,并将其作为入口点。
- 将您当前的 Fortran 入口点移到一个函数中。
- 从主函数调用该函数
- 用 C++ 编写一个名为
do_stop()
的小函数,它只会抛出一个异常 - 在您的 Fortran 语言中,将 STOP 替换为对 do_stop() 的调用。
您可以不捕获异常,或者在 main 中使用 try/catch
,这样可以更优雅地退出(显示您选择的错误消息而不是库编写的内容作者说你的程序有错误)。
关于c++ - 确保从 Fortran 应用程序调用 C++ 析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20570320/