有两种情况,第一种是一个类对象被new出来的(new类对象),第二种情况是类对象是在栈中,但类对象的成员变量是new出来的(new成员变量),第三种情况是声明类对象的指针(或者初始化了)。
在第一种情况下,①如果程序结束前也没有使用delete类对象,则不会自动调用析构函数,处于动态内存的类对象最后可能会被操作系统回收。②new时会发生构造函数。③如果程序结束前显示调用类对象的析构函数,则类对象会被销毁,但动态内存依然没有被释放。
第二种情况下,①程序结束时类对象最后会调用构造函数和析构函数,因为类对象处于栈中。②如果析构函数没有delete该动态内存的成员变量,则该成员变量的内存不会被释放。
第三种情况下,①定义指针不会发生构造函数和析构函数。