在Exit()时调用基本对象析构函数
Are Basic Object Destructors Called On Exit()?
我意识到这个问题已经出现了几次,但我试图得到上述问题的明确答案,但我不断遇到相互矛盾的信息。我需要知道的是,当我使用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;
}
现在,如果我从主程序中删除exit(1),"Object destroyed"answers"Hello"将按预期打印出来。把它留在那里,都没有打印出来。"Hello"的原因很明显,但我的印象是emp1仍然会被销毁,但销毁消息没有显示…
我正在看这个链接,它说静态对象被销毁。上面的对象不是静态的吗?
如果没有,是否有一种方法可以让程序在不占用内存的情况下终止?我的项目围绕用户输入展开,我试图在用户输入单词'exit'时提供退出选项。
if(input_var == "exit")
{
cout << "You have chosen to exit the program." << endl;
exit(1);
}
是我的意图的一个粗略的例子
根据这个链接,它不会清理对象。注意,如果使用非堆栈内存,它将调用析构函数:
static employee emp1;
第二个注意。任何时候使用cout
调试边缘情况、定时关键调试等,都应该在cout
之后添加cout.flush()
,以确保输出在继续之前被打印出来。我看到很多人使用cout
来调试崩溃,输出从来没有打印出来,因为程序在操作系统有机会打印输出之前就终止了。
您的emp1
变量在堆栈上分配。exit
不销毁基于本地栈的变量
我需要知道的是,如果一个基本类对象被析构,当我使用exit () .
你已经证明了它不是。标记为"exit"的操作系统服务在不考虑代码问题的情况下这样做。
是否有一种方法可以让程序终止而不与之发生冲突记忆?
您已经演示了exit至少是不调用c++析构函数而终止程序的一种方法。退出是语言无关的
a)这意味着内存不会被析构函数修改。
那么内存是被拧坏了吗?
b)退出(和主返回)处理的一部分是该进程的所有内存资源将被操作系统回收。内存不会被'拧',(没有调用析构函数,没有'wipe'或'erase')。
c) exit的一部分是关闭由该进程打开的所有流。(文件、设备、终端等)
你可以扔。异常将清除未展开的作用域。
//...
int main()
{
try{
employee emp1;
throw 1; //fake; throwing an object is more advisable in real situations
cout << "Hello" << endl;
}catch(int){
exit(1); //or better simply `return 1;`
}
}
输出:
Object destroyed
- 什么时候调用组成单元对象的析构函数
- 使用基类指针创建对象时,缺少派生类析构函数
- 对具有动态分配的内存和析构函数的类对象的引用
- C++析构函数调用两次,堆栈分配的复合对象
- 如何从 Gtk::窗口调用派生对象的析构函数
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- 为什么为未删除的对象调用析构函数?
- 对象的构造函数和析构函数
- 循环中本地对象的析构函数是否保证在下一次迭代之前被调用?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 从未调用shared_ptr对象的析构函数
- 是否可以在其析构函数中使用指向已销毁对象的指针?
- 使用私有析构函数删除动态分配的对象
- C++ std::线程调用方法,从对象原因到调用此类的析构函数
- 为什么在这里调用析构函数,以及在调用该对象析构函数后如何调用对象成员函数?
- 对象析构函数在多线程处理时不断被调用,但该对象并未超出范围
- C++包含包含指针的对象的对象析构函数
- Objective-C++C++对象析构函数
- 结构对象析构函数
- 在Exit()时调用基本对象析构函数