关于调用构造函数和析构函数的时机,求教!该怎么处理

关于调用构造函数和析构函数的时机,求教!
 
程序没有错误,我主要不解的是关于构造函数和析构函数的调用时机问题不太清楚:
(我在构造函数和析构函数中都附加了一个输出)

我采用以下形式建立类:

C/C++ code


#include<iostream.h>
#include"EMPLOYEE.H"

Employee test0("Esion0","You0");

void main()
{
    
    cout<<"实例化前的对像个数是:"<<Employee::getCount()<<endl;
    Employee test1("Ivan","Long");
    Employee test2("Esion","You");
    cout<<"实例化后的对像个数是:"<<Employee::getCount()<<endl;
    {
    Employee test3("Esion2","You2");
    }
    
    cout<<"实例化后的对像个数是:"<<Employee::getCount()<<endl;
    
}



这上面的程序按着我所理解的形式调用了构造函数和析构函数
可是如下代码:

C/C++ code


#include<iostream.h>
#include"EMPLOYEE.H"

Employee *test0=new Employee("Esion0","You0");

void main()
{
    
    cout<<"实例化前的对像个数是:"<<Employee::getCount()<<endl;
    Employee *test1=new Employee("Ivan","Long");
    Employee *test2=new Employee("Esion","You");
    cout<<"实例化后的对像个数是:"<<Employee::getCount()<<endl;
    {
    Employee *test3=new Employee("Esion2","You2");
    }
    
    cout<<"实例化后的对像个数是:"<<Employee::getCount()<<endl;
    
}



为什么需要使用delete释放相关后才能够调用析构函数?
何解?能否讲具体一点,谢谢

------解决方案--------------------
用new分配的对象在堆上,必须用delete来释放
------解决方案--------------------
引用楼主 JustIvanLong 的帖子:
为什么需要使用delete释放相关后才能够调用析构函数?
何解?能否讲具体一点,谢谢

------解决方案--------------------
应该这样说,你在程序里面显式地分配了内存,你就要显式地释放掉,因为程序不知道你什么时候要释放掉。
而在第一例中,每个对象都有确定的作用域,编译器可以帮你完成这件事情。
------解决方案--------------------
当使用Employee test1("Ivan","Long");这种方式创建一个对象时,此对象是一个栈上的对象,栈上的内存是在此函数模块结束时由系统自动释放,那个时刻,对象的析构函数也就自动被调用了。
然而通过Employee *test1=new Employee("Ivan","Long");这种方式创建的对象,它是一个堆上的对象,堆内存的申请和释放都是有程序员自己管理的。所以,当你delete一个对象时,它的析构函数才会被调用。