首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-23 
关于调用构造函数和析构函数的时机,求教!程序没有错误,我主要不解的是关于构造函数和析构函数的调用时机问

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

我采用以下形式建立类:

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一个对象时,它的析构函数才会被调用。

热点排行