Arm*_*yan 0 c++ virtual-destructor
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
}
Run Code Online (Sandbox Code Playgroud)
问题是:这是否存在真正危险的现有实施? 如果是这样,你能否描述一下如何在该实现中实现内部代码,使代码崩溃/泄漏或其他什么?我请求你相信,我发誓,我无意依赖这种行为:)