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

来源:互联网 发布:国产电视剧知乎 编辑:程序博客网 时间:2024/05/22 02:21

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

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


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