C++析构函数的执行时机

/*********************************************************************
 * 析构函数的执行时机
 * 析构函数在对象被销毁时调用,而对象的销毁时机与它所在的内存区域有关。
 * 在所有函数之外创建的对象是全局对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。
 * 在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束时会调用这些对象的析构函数。
 * 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;

    //delete(pobj4);
  
    return 0;
}

  

 

posted @ 2020-12-23 21:15  quliuliu2013  阅读(580)  评论(0)    收藏  举报