为什么要将析构函数定义为虚函数呢?由于可以使用父类指针保存子类对象的首地址,因此当时用父类指针指向子类堆对象时就会出问题。当使用delete释放对象的空间时,如果析构函数没有定义为虚函数,那么编译器就会按指针的类型调用父类的构造函数,从而引发错误。而使用了析构函数后,会访问虚表并调用对象的析构函数。实现过程如下:


对于没有派生和继承关系 的类结构,是否将析构函数声明为虚析构函数不会影响到调用的过程,但是在编写析构函数时形成好习惯,无论当前是否有派生或继承关系,都应将析构声明为虚析构函数。
博客探讨了将析构函数定义为虚函数的原因。当父类指针指向子类堆对象,用delete释放空间时,若析构函数非虚,编译器会按指针类型调用父类构造函数致错。使用虚析构函数可访问虚表调用对象析构函数,建议编写时养成声明虚析构的习惯。
为什么要将析构函数定义为虚函数呢?由于可以使用父类指针保存子类对象的首地址,因此当时用父类指针指向子类堆对象时就会出问题。当使用delete释放对象的空间时,如果析构函数没有定义为虚函数,那么编译器就会按指针的类型调用父类的构造函数,从而引发错误。而使用了析构函数后,会访问虚表并调用对象的析构函数。实现过程如下:


对于没有派生和继承关系 的类结构,是否将析构函数声明为虚析构函数不会影响到调用的过程,但是在编写析构函数时形成好习惯,无论当前是否有派生或继承关系,都应将析构声明为虚析构函数。

被折叠的 条评论
为什么被折叠?