☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

被 delete 释放的对象或数组类型不符合要求

C++-Undefined-Behavior-40
目录 › next › previous

用 delete 释放对象时,对象的静态类型应与动态类型兼容,如果静态类型是动态类型的基类,静态类型应提供虚析构函数,否则导致未定义的行为;用 delete[] 释放数组时,对象的静态类型应与动态类型一致,否则导致未定义的行为。

示例:

struct B { ~B(); };
struct D: B { ~D(); };

B* pDObj = new D;
B* pDArr = new D[123];

delete pDObj;      // Undefined behavior
delete[] pDArr;    // Undefined behavior

例中基类 B 缺少虚析构函数,pDArr 的类型应为派生类指针。

依据

ISO/IEC 14882:2003 5.3.5(3)-undefined ISO/IEC 14882:2011 5.3.5(3)-undefined

规则

ID_missingVirtualDestructor ID_arrayPointerCast
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.