c++中类的定义问题

如图,蓝色圈中的是相互对应的么?如果是,为什么这个析构函数会先被调用,析构函数不是都是在最后才被调用的么?
#include <iostream>
using std::cout;
class Sample {
private:
char name;
int data;
public:
Sample() {
name='x';
data=0;
cout<<"调用默认构造函数\n";
}
Sample(char c) {
name=c;
data=0;
cout<<"调用单参数构造函数\n";
}
Sample(char c, int i) {
name=c;
data=i;
cout<<"调用多参数构造函数\n";
}
~Sample() {
cout<<"调用析构函数\n";
}
};
void fn()
{
Sample a;
}
Sample b('b'); //这里调用单参;
int main()
{
Sample c('c',1); //这里调用多参;
{
Sample d('d',2); //这里调用多参;
}
fn();
}

在函数中定义的变量,如果不是用new创建的,那么就是建立在栈空间上的。栈上的变量在函数执行完之后,系统会按照“先进后出”的原则依次删除。如果变量是类的对象,系统会调用类的析构方法。在块中的变量会首先被删除,嵌套的块变量自里而外删除。

在本程序中,解释如下:

    b、c、d是依次定义的,按顺序定义;

    d在main函数里层的块中定义,因此最早被删除;

    x是f函数的局部变量,调用f时定义

    f调用完后,x被删除;

    c是main函数的局部变量,main函数执行完后被删除;

    b是全局变量,最后被删除。

温馨提示:答案为网友推荐,仅供参考
相似回答