对比exit 和 _exit区别,exit 推出会执行静态类的析构函数,而_exit不会
#include <iostream>
#include <cstdlib>
#include <unistd.h>
class MyClass {
public:
MyClass(const std::string& name) : name(name) {
std::cout << name << " constructor" << std::endl;
}
~MyClass() {
std::cout << name << " destructor" << std::endl;
}
private:
std::string name;
};
void exitHandler() {
std::cout << "Exit handler called" << std::endl;
}
int main() {
MyClass localObj("Local");
static MyClass staticObj("Static");
std::cout << "Using exit:" << std::endl;
std::exit(0);
// std::cout << "Using _exit:" << std::endl;
// _exit(0);
return 0;
}
总结:
比较这些退出方式
exit:
调用全局和静态对象的析构函数。
调用通过 atexit 注册的退出处理程序。
不调用局部对象的析构函数。
_exit:
立即终止程序,不调用任何析构函数。
通常用于子进程的快速退出。
return:
正常退出程序,调用所有对象的析构函数。
适用于程序正常结束的情况。