为什么没有std::on_exit?
Why is there no std::on_exit?
一个程序可以以各种不同的状态代码退出。
我想绑定一个退出处理程序作为基于此状态代码处理最终任务的所有方式。
是否可以从退出处理程序中调度状态代码?
据我所知,No。
因此,我无法获取状态值,如这个小示例所示:
#include <iostream>
#include <cstdlib>
int Get_Return_Code(){
//can this be implemented?
return 0;
}
void Exit_Handler() {
// how do I get the return code
// from within the exit heandler?
auto return_code = Get_Return_Code(); //?
// I'd like to make decisions based on the return code
// while inside my exit handler
if (return_code == EXIT_SUCCESS){
std::cout << "perform exit successful tasks...\n";
}
else {
std::cout << "perform exit failure tasks...\n";
}
}
int main(int argc, char** argv)
{
//bind the exit handler routine
if (std::atexit(Exit_Handler)){
std::cerr << "Registration failed\n";
return EXIT_FAILURE;
}
//if an argument is passed, exit with success
//if no argument is passed, exit with failure
if (argc > 1){
std::cout << "exiting with success\n";
return EXIT_SUCCESS;
}
std::cout << "exiting with failure\n";
return EXIT_FAILURE;
}
是否存在 C++ 尚未包含 on_exit 的原因?
我担心 windows 世界中的交叉兼容性。
关于代码库:
我这样做的目标不涉及内存管理。我们有一个现有的代码库。到处都有退出声明。当程序因错误退出时,我想向用户显示该错误代码的含义。在我看来,这是最快的解决方案,无需进行重大重构。
因为清理任务应该由您的析构函数执行,并且您的代码应该在任何情况下从任何范围优雅地 return(通过 return
或 throw
).
at_exit
是 RAII 友好世界中的反模式。
如果您想根据要从 main
到 return 的内容执行一些逻辑,只需在您要从 [=13 到 return 时执行它=].在 main
.
最简单和最便携的解决方案是将您的程序包装在 shell 脚本或其他程序中。然后,此包装脚本或程序可以检查退出代码并向用户显示适当的消息。
一个程序可以以各种不同的状态代码退出。
我想绑定一个退出处理程序作为基于此状态代码处理最终任务的所有方式。
是否可以从退出处理程序中调度状态代码?
据我所知,No。
因此,我无法获取状态值,如这个小示例所示:
#include <iostream>
#include <cstdlib>
int Get_Return_Code(){
//can this be implemented?
return 0;
}
void Exit_Handler() {
// how do I get the return code
// from within the exit heandler?
auto return_code = Get_Return_Code(); //?
// I'd like to make decisions based on the return code
// while inside my exit handler
if (return_code == EXIT_SUCCESS){
std::cout << "perform exit successful tasks...\n";
}
else {
std::cout << "perform exit failure tasks...\n";
}
}
int main(int argc, char** argv)
{
//bind the exit handler routine
if (std::atexit(Exit_Handler)){
std::cerr << "Registration failed\n";
return EXIT_FAILURE;
}
//if an argument is passed, exit with success
//if no argument is passed, exit with failure
if (argc > 1){
std::cout << "exiting with success\n";
return EXIT_SUCCESS;
}
std::cout << "exiting with failure\n";
return EXIT_FAILURE;
}
是否存在 C++ 尚未包含 on_exit 的原因?
我担心 windows 世界中的交叉兼容性。
关于代码库:
我这样做的目标不涉及内存管理。我们有一个现有的代码库。到处都有退出声明。当程序因错误退出时,我想向用户显示该错误代码的含义。在我看来,这是最快的解决方案,无需进行重大重构。
因为清理任务应该由您的析构函数执行,并且您的代码应该在任何情况下从任何范围优雅地 return(通过 return
或 throw
).
at_exit
是 RAII 友好世界中的反模式。
如果您想根据要从 main
到 return 的内容执行一些逻辑,只需在您要从 [=13 到 return 时执行它=].在 main
.
最简单和最便携的解决方案是将您的程序包装在 shell 脚本或其他程序中。然后,此包装脚本或程序可以检查退出代码并向用户显示适当的消息。