当独生子女类具有虚拟方法时使用多态性的问题
Issue with Using Polymorphism While Only Child Class has a Virtual Method
以下代码在任何方面都违反了C++11标准吗?我在VC++2013中得到了一个失败的断言。
class P {};
class C : public P
{
public:
virtual void a() {}
};
int main()
{
P* p = new C();
delete p;
}
失败的断言是:
File: f:ddvctoolscrtcrtw32miscdbgdel.cpp
Line: 52
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
是,
delete p;
具有Undefined Behavior,因为指针对象的动态类型与静态已知类型不同,后者没有虚拟析构函数。
C++11§5.3.5/3:
"在第一种选择中(删除对象),如果要删除的对象的静态类型与其动态类型,静态类型应为要删除的对象的动态类型的基类静态类型应该有一个虚拟析构函数,或者行为是未定义的
相关文章:
- C++boost序列化多态性问题
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?
- 使用多态性解决代码重复问题
- 与智能指针和矢量C 的多态性有关的问题
- std::vector 和/或多态性的问题
- 多种继承和多态性问题
- C 成员功能多态性问题
- C 的多态性问题 - 数据覆盖
- 静态多态性问题
- 我正在尝试[C++]练习多态性和OOD原则。需要指导和几个问题的答案
- C++对象多态性问题
- 涉及指针成员变量和多态性的非常奇怪的问题
- 多态性和受保护的继承问题
- 多态性确定问题
- 当独生子女类具有虚拟方法时使用多态性的问题
- 解决这个多态性问题的最优雅的方法
- 带有列表的c++多态性问题
- 实例化子类的多态性问题
- 基类和派生类构造函数多态性问题
- C++中的多态性问题