构造 析构 虚函数

来源:互联网 发布:nginx listen 编辑:程序博客网 时间:2024/06/06 02:30

构造函数能否声明为虚函数


子类继承父类,考虑到构造函数的顺序,对于子类的构造,先是调用父类的构造函数生成父类数据结构,然后再调用子类定义的构造函数,补充其他初始化工作
而虚函数主要用在多态里面,父类的指针或引用指向子类结构,相同的函数声明,体现不同的实现过程,根本上是虚函数表指针机制决定的,虚函数表指针是虚函数的唯一入口
如果父类构造函数声明为虚函数,子类的构造函数和父类同名,那么子类在构造的时候不会调用父类的构造函数,因为声明为虚函数嘛,那么父类的构造将没有执行,父类都没有构造,子类如何生成呢?就像是基础没打,就直接空中楼阁了

构造函数能否调用虚函数


构造一个子类时,会先调用父类的构造函数,如果构造函数里面调用了虚函数,因为虚函数的多态性,实际上这个虚函数又会走到子类的这个函数定义中去,然而子类还没有构造,还没有初始化啊,相当于调用了一个还没初始化的对象,产生矛盾

析构函数能否声明为虚函数,即虚析构


有些类的构造有内存申请,析构函数要释放申请的内存,如果不用析构,比如一个子类对象赋给一个父类指针,父类指针调用析构时,将只调用父类的析构部分,造成子类内存泄露,虚析构函数的多态性能解决这个问题
动态内存管理的特性决定了必须要用多态实现,必须要用虚析构函数

析构函数能否调用虚函数


如果析构函数调用了虚函数,当子类析构时,会先析构子类的部分数据,然后调用父类的析构函数,这里面的虚函数又会走到子类中去,然后子类部分已经先析构了呀,矛盾

0 0
原创粉丝点击