类是在什么时候调用它的析构函数的


在c++中,一个程序中的类是在什么时候调用它的析构函数的,是在程序结束时吗

22 个解决方案

#1


在他的对象被干掉之后.

那么他的对象何时被干掉,有多种情况了。

#2


如果这个类的对象是个局部对象,那么在对象退出作用域时调用析构函数。

如果是全局对象,则在整个程序结束( main() 函数中调用return(),exit()等等 )时析构。

如果这个对象被分配在自由存储区中,当delete 这个对象时调用析构函数。

#3


同意eric8231(小诗),基本就是这三种情况。

其实即使在局部,比如说函数中,遇到return也会析构,虽然这是作用域可能并没结束。

总之,我觉得在你认为它该死的时候它就死了,^_^

#4


楼上仁兄说的“对象被分配在自由存储区中”是怎么个情况?
(我是新手)

#5


编译器在碰到}时调用析构
析构函数可以被跳过吗?goto 等语句???


#6


当对象被消除的时候.
如果是在栈上的对象,则在离开对象作用域处,goto语句可以跳过作用域的结束处,即}处,所以goto是应该被禁止的,这个问题不必争论了.(Dijkstra!!!!!!
如果是在堆上的对象(动态,new),则当释放空间时(delete).
当然也可以显示调用,但这样不安全,应为当出现消除对象时还要再调一次,这时对象已经不存在了.

#7


了解

#8


对于nirvana_ya的解释有疑问:
如果想上面所说的那样,goto 语句就是非法的了,如果存在goto 跳过 } 的情况,其中在栈中创建的局部变量,到底何时释放,如果没有及时释放岂不是造成堆栈不能平衡。

#9


对于静态创建的对象,它的析构函数是不会被跳过去的,除非断电。^_^
对于动态创建的对象(如new),那么不用delete 就会跳过去。不过,这是不推荐的,因为内存会因此越来越少。直至系统瘫痪。


    ℃        ╭══╮ 
    █┳ ┄ ┄ ╭╯□卐║ 
    ┛┗     ╰⊙═⊙╯oо○ 〇╭╮ 

#10


还有,调用析构函数的不是类而是对象。

#11


吃完零食就把包装袋丢了吧!
呵呵。。。

#12


在类的对象终结时,自动调用该类的析构函数。

#13


已经总结的够详细的了   不说了

#14


回复人: eric8231(小诗) ( ) 信誉:100  2003-06-08 17:03:00  得分:0 
 
 
  如果这个类的对象是个局部对象,那么在对象退出作用域时调用析构函数。

如果是全局对象,则在整个程序结束( main() 函数中调用return(),exit()等等 )时析构。

如果这个对象被分配在自由存储区中,当delete 这个对象时调用析构函数。
  
 
Top 
 
补充一点:
应该是4种,或者更多的情况
至少:
手动调用析构函数也可以,而且有时也非常必要

#15


首先楼主的标题好象有点错误,不是类什么时候调用析构函数,应该是对象什么时候调用。

具体说到对象调用析构函数,是一个比较复杂的问题,比如说临时对象的产生和析构,欠套类对象的产生和析构,等等。

总之遇到具体问题要细心的具体分析才行啊。

感觉上面写的东西废话比较多:》

#16


说明一下,刚才说的上面是说我自己说的话,可不是上面大家说的话啊

……——……

#17


blizzardinto(董) 
现在的编译器已经对goto的行为作了处理,如果goto跳过了},编译器会对{}队中的对象调用析构.

#18


^_^

goto 能 goto 到哪里?

#19


细细看书吧!都是些知识点的东西,另外,找一段代码,全部设置断点,然后一步一步调试,

那样会看到程序执行的情况!但是,没一不要分析:“为什么”?

不知道我这种土办法行不行。不要笑我呀!

#20


最后!

#21


程序用娄时就调用构造符,程序退出娄时就调用柝构符。

#22


想切身体会一下的话,可以用调试模式运行一下程序就知道了

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: