C++创建类对象的生命周期

    全局对象在main开始前被创建,main退出后被销毁。
#include <iostream>
using namespace std;
class A{
          
   
public:
    A()
    {
          
   
        cout<<"执行构造函数"<<endl;
    }
    ~A(){
          
   
      cout<<"执行析构函数"<<endl;
    };
};

A a1; //全局对象
int main(){
          
   
    cout<<"执行main函数"<<endl;
    return 0;
}

执行结果:

    静态对象在第一次进行作用域时被创建,在main退出后被销毁(若程序不进入其作用域,则不会被创建)
#include <iostream>
using namespace std;
class A{
          
   
public:
    A()
    {
          
   
        cout<<"执行构造函数"<<endl;
    }
    ~A(){
          
   
      cout<<"执行析构函数"<<endl;
    };
};

int main(){
          
   
    cout<<"执行main函数"<<endl;
    A a1;
    cout<<"退出main函数"<<endl;
    return 0;
}

执行结果:

    局部对象在进入作用域时被创建,在退出作用域时被销毁作用域由{}定义,可以用构造函数和析构函数来追踪对象的生命周期
#include <iostream>
using namespace std;
class A{
          
   
public:
    A()
    {
          
   
        cout<<"执行构造函数"<<endl;
    }
    ~A(){
          
   
      cout<<"执行析构函数"<<endl;
    };
};

int main(){
          
   
    cout<<"执行main函数"<<endl;
    {
          
   
        A a1;
    }//执行析构
    cout<<"退出main函数"<<endl;
    return 0;
}

执行结果:

    new创建的对象会一直存在,即使指向该对象的指针已被销毁,容易造成内存泄漏,对象会一直存在直到程序退出,因此应该推断,程序退出时对象会销毁,不是“优雅”地销毁的,根据delete执行析构
#include <iostream>
using namespace std;
class A{
          
   
public:
    A()
    {
          
   
        cout<<"执行构造函数"<<endl;
    }
    ~A(){
          
   
      cout<<"执行析构函数"<<endl;
    };
};

int main(){
          
   
    cout<<"执行main函数"<<endl;
    {
          
   
        A *a1=new A;
        delete a1;
    }
    cout<<"退出main函数"<<endl;
    return 0;
}

执行结果:

经验分享 程序员 微信小程序 职场和发展