C++析构函数的执行时机
发布时间:2023-06-05 12:44:31 所属栏目:语言 来源:
导读:在所有函数之外创建的对象是全局对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。
在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束
在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束
在所有函数之外创建的对象是全局对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。 在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束时会调用这些对象的析构函数。 new 创建的对象位于堆区,通过 delete 删除时才会调用析构函数;如果没有 delete,析构函数就不会被执行。 下面的例子演示了析构函数的执行。 #include <iostream> #include <string> using namespace std; class Demo{ public: Demo(string s); ~Demo(); private: string m_s; }; Demo::Demo(string s): m_s(s){ } Demo::~Demo(){ cout<<m_s<<endl; } void func(){ //局部对象 Demo obj1("1"); } //全局对象 Demo obj2("2"); int main(){ //局部对象 Demo obj3("3"); //new创建的对象 Demo *pobj4 = new Demo("4"); func(); cout<<"main"<<endl; return 0; } 运行结果: 1 main 3 2 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |