注册 登录
编程论坛 C++教室

构造函数和析构函数的调用

andyandy 发布于 2009-12-24 10:27, 1632 次点击
在类中定义了构造函数和析构函数。main函数中用该类定义了一个对象。是否可以这样理解——
当定义该对象时,构造函数就被调用了。main函数结束时则调用析构函数。
也就是说——
类中定义了构造函数和析构函数,main函数用该类定义了对象。那么构造函数和析构函数的调用都是自动的,无需在main中写调用这两个函数的代码。
对吗?
问题很菜,请高手解答一下。
6 回复
#2
天使梦魔2009-12-24 16:07
构造是保证类在使用的时候一些必须初始化的东西,一旦建立一个就会调用.
析构不一定要在全部程序退出时调用,当某个部分不需要了也会被系统自动.

这个类不一定只是简单的数据和过程,也许包含了整个大型库的过程.
类的作用就是只给出接口而不给出过程,单独使用接口就完成工作.
这个问题在多人合作的时候最突出,甚至是一个人开发的时候.

打个比方,你的程序需要描述图形引擎,物理引擎,结构引擎,也许这是个游戏.
所有的内容不可能同时加载到内存,也不可能同时运算.
每个引擎自己都会有释放,加载.有些定义是很危险的.比如员工在工作室里工作的时候放了很多工具,但在收拾的时候可能会因为步骤不对或者忘记而导致工作室出现问题.

一个类里含着另一个类,如同树形结构,一旦释放(人为或者系统,反正它暂时不需要了,占用空间很大).如果因为某个类里没有做好,或者考虑好释放的问题而引起总体崩溃.你只是使用了一个树根,就算你知道某个树叶会引起不正常,你也手动释放不了.

析构不一定在main里结束,它可能会随着类的生命期,或者智能释放,又或者人为的这么做了........被KILL掉
#3
英英2009-12-24 19:59
我感觉楼主说的是对的呀,之前做的一个实验,就是在程序执行最后调用的各个析构函数啊
#4
天使梦魔2009-12-24 21:09
没人说他说错了.
#5
guchao20092009-12-26 23:14
当你在主函数中定义一个对象时,编译时系统会自动调用构造函数。当定义的对象是无参,自动调用无参构造函数;当定义的对象是有参,自动调有有参构造函数。

类中没有析构函数时,编译器将自动创建一个隐含的空析构函数。

考虑到系统可用内存的减少或者不足,定义析构函数。

析构函数也由系统自动调用。
#6
yangliangbin2009-12-26 23:31
恍然大悟~~~
#7
dumy092009-12-27 09:21

但析构函数的调用确切的讲是随生存期的结束而结束的
所以
main函数结束,析构一定会被调用的
1