请教C++对象指针的问题

img

img


这两个程序,第一个结果是221,为什么会出现这个结果啊,请问调用了new运算符赋值给了对象指针以后,会不会自动调用析构函数

Obj ob1调用构造,i变为1
Obj2 ob2调用构造,i变为2,所以输出为2
由于ob2是函数内局部变量,函数结束后自动销毁,调用析构函数,i变为1
ob3调用构造函数,i变为2,所以输出为2
释放ob3,调用析构函数,i变为1,所以输出为1

第一个答案的解释如下:

因为i是static静态变量,所有Obj类型的实例共用一个i。
main函数中,
Obj ob1;这里调用构造函数,i++,i的值变成1
f();这里,声明一个Obj ob2,再一次调用构造函数,i++,i的值变成2
    ob2调用getVal()函数,显示i的值,显示 2(显示的第一个数字)

f()函数结束后,ob2被析构,调用析构函数,i--,i的值变成1;


Obj* ob3 = new Obj这里,再一次调用构造函数,i++,i的值变成2,
    ob3调用getVal()函数,显示i的值,显示2(显示的第二个数字)

delete ob3这里,调用析构函数,i--,i的值变成1,在调用getVal()函数显示,显示1(显示的第三个数字)