gpt4 book ai didi

c++ - exit(0) 在 othewise "empty" block 中会不好吗?

转载 作者:行者123 更新时间:2023-11-30 01:24:00 24 4
gpt4 key购买 nike

我试图阅读 return EXIT_SUCCESS;main() 和从任何地方调用 exit(EXIT_SUCCESS) 之间的区别,到目前为止我找到的最好的资源是 this answer here on SO .但是,我想澄清一个细节。

对我来说,反对 exit() 的最有说服力的论点(如该帖子中所述)是没有对局部范围的对象调用析构函数。但这对其他对象意味着什么?如果我从其他地方调用 exit(),在堆栈上离 main() 方法很远,但是在 block (甚至是一个方法)中包含只有那个电话,没有变量?堆栈中其他地方的对象是否仍会被破坏?

我的用例是这样的:

我有一个应用程序一直提示用户输入,直到给出“退出”命令(基于文本的冒险游戏)。实现这一点的最简单方法是将“退出”映射到一个只调用 exit(EXIT_SUCCESS) 的方法。当然,我可以这样写,这样用户可以执行的每个操作都会返回一个 bool 值,指示游戏是否应该继续,然后在我需要时返回false退出 - 但唯一时间我会返回除 true 以外的任何东西来自此方法 - 然后所有其他操作方法都必须 return true只是因为我想避免 exit()。另一方面,我创建了很多对象并动态分配了很多内存 - 所有这些都必须由类析构函数处理,因此它们的运行至关重要。

此处的最佳做法是什么?这是 exit() 的好案例,还是与 main 方法一样糟糕?

最佳答案

if (command == "quit") {
throw QuitGameException();
}

您可以抛出异常。异常会安全地展开堆栈并销毁沿途所有调用者中的对象。

关于c++ - exit(0) 在 othewise "empty" block 中会不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com