构造和析构函数用于管理对象的初始化和清理工作,确保对象的正确生命周期管理。以下是其重要特性:
构造函数不能是虚函数
从存储空间角度:
虚函数是需要通过虚函数表和虚指针来调用的,如果用虚函数实现构造函数,而对象还没实例化,都没有虚函数表和虚指针,因此,构造函数不能是虚函数。
从使用角度:
虚函数的作用是通过父类的指针或引用,在调用父类时能够调用继承类对应的成员函数。而构造函数是自动调用,两者不符合,因此,构造函数不能是虚函数。
构造函数中可调用虚函数但不能发生多态
构造函数中可以调用虚函数,但是不可能发生多态行为,因为在构造函数执行时,虚函数表指针未被正确初始化。
析构函数可以且常常为虚函数
若析构函数为虚函数,delete时,基类和子类都会被释放。
若析构函数不是虚函数,delete时,只有基类被释放,子类没有被释放,存在内存泄漏的风险。
析构函数中可以调用虚函数但不能发生多态
析构函数中可以调用虚函数,但是不可能发生多态行为,因为在析构函数执行时,虚函数表指针已经被销毁。