C++03 5.3.5.3
在第一种选择(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应为操作数动态类型的基类,并且静态类型应具有虚拟析构函数或行为未定义.
这就是理论。然而,这个问题是一个实际的问题。如果派生类不添加数据成员怎么办?
struct Base{
//some members
//no virtual functions, no virtual destructor
};
struct Derived:Base{
//no more data members
//possibly some more nonvirtual member functions
};
int main(){
Base* p = new Derived;
delete p; //UB according to the quote above
}
问题:是否有任何现有的实现,这真的很危险? 如果是这样,您能否描述一下内部是如何在该实现中实现的,这会导致该代码崩溃/泄漏或其他什么?我求你相信,我发誓我无意依赖这种行为:)