虚拟析构函数

来自RAD Studio
跳转到:航行,搜索

转到析构函数索引

析构函数可以声明为虚拟的。这允许指向基类对象的指针在指针实际引用派生类对象时调用正确的析构函数。派生自具有虚拟的析构函数本身虚拟的.

/*虚拟如何影响析构函数调用的顺序。如果基类中没有虚拟析构函数,则派生的不会调用类析构函数*/#包括<iostream>类颜色{公众:virtual~color(){//虚拟析构函数标准::cout<<“color dtor\n”;}};红色类:公共色{公众:~red(){//此析构函数也是虚拟的标准::cout<<“red dtor\n”;}};亮红色类:公共红色{公众:~brightred(){//此析构函数也是虚拟的标准::cout<<“brightred dtor\n”;}};整型main(){颜色*调色板[3];调色板[0]=新红色;调色板[1]=新亮红色;palette[2]=新颜色;//调用红色和颜色的析构函数。删除调色板[0];标准::cout<<std::endl;//亮红色、红色和颜色的析构函数被称为。删除调色板[1];标准::cout<<std::endl;//调用颜色的析构函数。删除调色板[2];返回0;}

程序输出:

红色dtor彩色dtor亮dtor红色dtor彩色dtor彩色dtor

但是,如果没有析构函数声明为虚拟的,删除调色板[0],删除调色板[1],和删除调色板[2]将只调用类color的析构函数。这将错误地破坏前两个元素,它们实际上是红色和亮红色类型。

另请参见