C++和object pascal构造函数和析构函数的差异

12 篇文章 0 订阅

C++中,子类构造的时候会自动调用父类的构造函数,注意:子类的构造函数都是调用父类的无参构造函数,也就是说子类的构造函数即便有多个重载形式,任何子类重载的构造函数里都是调用的父类的无参构造函数,而不会调用父类其他重载的构造函数,子类释放的时候也会自动调用父类的析构函数。建议父类的析构函数声明为virtual,以便在多态的情况下,正确释放。C++的特征之一就是编译器不会帮用户做更多的工作,这样可以把细节都让用户了解,但是构造和析构函数是特例,编译器自动调用了,我认为主要是C++觉得这是必须的,一般来说确实是必须的,因为在初始化子类时,也不太可能不初始化父类的数据,否则会造成数据错误之类的问题。

object pascal中,子类的构造函数调用的时候,并不会自动调用父类的构造,需要添加inherited来显式的调用父类的构造函数,子类调用析构函数也一样,需要显式的调用父类的析构函数,这样的优势在于,父类的析构函数调用可以由用户决定调用为止,但建议在最后调用。


学习建议:当你不清楚构造函数、析构函数、虚函数是怎么回事,或者说是怎么调用,如何调用的情况下,请一定在编译器上测试明白之后,在进行代码的开发,软件设计不能有模糊不清的东西,若不清楚,一定编写测试代码搞清楚为止,否则今后会导致很多你不明白的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值