【发布时间】:2015-05-01 13:17:59
【问题描述】:
如果我们定义一个虚拟析构函数会导致UB吗?例如:
struct A{ virtual ~A(){ } };
struct B : A { };
A *a = new B;
int main()
{
delete a; //UB?
}
【问题讨论】:
-
完全可以。这就是多态性的意义所在。 (但确实,请确保析构函数是虚拟的。)
-
@AlexD 为什么析构函数的虚拟性在这里很重要?我知道如果我们不声明析构函数,我们会得到 UB。
标签: c++ language-lawyer undefined-behavior