我目前有一个具有以下基本结构的程序
主要功能 - 向用户显示菜单选项 - 通过将用户输入传递给第二个函数(input_validator)来验证用户输入 - 如果用户选择选项1,则运行功能1等
function1,2,3等 - 从用户请求输入,然后由input_validator验证 - 如果input_validator返回true,我们知道输入是好的
这是我的问题。我希望允许用户通过键入“0”在程序中的任何位置退出。我计划在input_validator中使用一些基本代码(如果输入= 0等)。
这看起来很简单,但我被告知使用quit()会导致某些资源从未被释放/等等。我不能简单地做一个'休息' - 这将导致我的程序只是返回到主要功能。
有什么想法吗?
答案 0 :(得分:4)
正常终止该过程, 执行常规清理 终止过程。
首先,注册的所有功能 对atexit的调用是在。中执行的 他们的注册顺序相反。 然后,所有流都关闭了 临时文件已删除,最后 控件返回给主机 环境。
答案 1 :(得分:4)
一种可能性是通过抛出你在main中捕获的异常来做到这一点,当你捕获它时,你退出程序。抛出异常的好处是它允许析构函数运行以清理已创建的对象,如果您直接从其他地方退出(例如,使用exit()
),则不会发生这种情况。
答案 2 :(得分:3)
长期以来,任何一种主流操作系统都不是这样。操作系统确保释放所有内核资源,即使程序没有明确地这样做。从代码中的任何地方调用abort()或exit()都可以。
答案 3 :(得分:1)
exit(int exitCode) - 在stdlib.h / cstdlib中定义 - 你可能想要退出(0); //正常终止。
答案 4 :(得分:0)
exit()不会调用析构函数,因此您可能需要考虑使用异常处理程序。
如果您有类似打开但未刷新的文件,操作系统将关闭文件句柄,但不会刷新任何未写入的数据。
答案 5 :(得分:0)
您必须设计菜单系统,以便状态可以传递回上一个方法,然后展开,直到执行main
函数中的代码。类似问题适用于后退或上一屏幕按钮。
退一步看一下 Big Picture ,展开技术与C ++异常处理策略非常相似。对于不遵循正常执行流程的情况,我建议使用例外,例如主菜单和上一级菜单< / em>的
尝试一下。