gpt4 book ai didi

c++ - 是否在 Exit() 时调用基本对象析构函数?

转载 作者:太空狗 更新时间:2023-10-29 20:37:55 27 4
gpt4 key购买 nike

我知道这个问题已经出现过几次,但我正试图为上述问题找到明确的答案,但我不断遇到相互矛盾的信息。我需要知道的是,当我使用 exit() 时,一个基本类对象是否被破坏。我知道需要删除动态内存,但我的意思更像是:

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

class employee
{
public:
employee ();
string name;
~employee();
};

employee::employee ()
{
name = "bob";
}

employee::~employee()
{
cout << "Object destroyed" << endl;
}

int main()
{
employee emp1;
exit(1);
cout << "Hello" << endl;
}

现在,如果我从 main 中删除 exit(1),则会按预期打印“Object destroyed”和“Hello”。把它留在那儿,但都没有打印出来。 “Hello”的原因很明显,但我的印象是 emp1 仍会被破坏,但没有显示破坏消息......

我在看 this link它说静态对象被销毁。上面的对象不是静态的吗?

如果不是,有没有办法让程序在不破坏内存的情况下终止?我的项目围绕用户输入展开,我试图在用户输入“退出”一词时提供退出选项。

if(input_var == "exit")
{
cout << "You have chosen to exit the program." << endl;
exit(1);
}

是我意图的粗略示例。

最佳答案

根据 this link ,它不会清理对象。注意,如果你使用非栈内存,它会调用析构函数:

static employee emp1;

第二个注意事项。任何时候你使用 cout对于调试边缘情况、时序关键调试等,您应该添加 cout.flush()cout 之后以确保您的输出在继续之前被打印出来。我看到很多人用 cout用于调试崩溃和输出永远不会打印,因为程序在操作系统有机会打印输出之前终止。

关于c++ - 是否在 Exit() 时调用基本对象析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314143/

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