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

动态创建的对象在使用前应被初始化

8.10 ID_dynamicInitialization
目录 › next › previous

通过 malloc、new 等方式动态创建的对象在初始化前具有不确定的值,读取未初始化的对象会导致标准未定义的行为。

示例:

int* a = new int[2];
use(a[0] + a[1]);     // Non-compliant

struct A {
    int x, y;
};
A* b = new A;
use(b->x * b->y);     // Non-compliant

建议在创建处初始化:

int* a = new int[2]();  // Zero-initialization, all elements are 0
A* b = new A();         // Zero-initialization, all members are 0

new 表达式结尾的空括号表示将元素或成员初始化为 0,对于类类型,如果存在自定义默认构造函数,则会调用默认构造函数进行初始化。

也可以使用列表初始化指定元素或成员的值:

int* a = new int[2]{1, 2};  // List-initialization
A* b = new A{3, 4};         // List-initialization

数组的两个元素分别为 1 和 2,A 对象的两个成员分别为 3 和 4。

相关

ID_illAccess ID_localInitialization

依据

ISO/IEC 14882:2003 5.3.4(15) ISO/IEC 14882:2011 5.3.4(15)
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.