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

避免不必要的内存分配

2.22 ID_unnecessaryAllocation
目录 › next › previous

对单独的基本变量或只包含少量基本变量的对象不应使用动态内存分配。

示例:

bool* pb = new bool;   // Non-compliant
char* pc = new char;   // Non-compliant

内存分配的开销远大于变量的直接使用,而且还涉及到回收问题,是得不偿失的。

应改为:

bool b = false;   // Compliant
char c = 0;       // Compliant

用 new[] 分配数组时方括号被误写成小括号,或使用 unique_ptr 等智能指针时遗漏了数组括号也是常见笔误,如:

int* pi = new int(32);            // Non-compliant
auto ui = make_unique<int>(32);   // Non-compliant

应改为:

int* pi = new int[32];              // Compliant
auto ui = make_unique<int[]>(32);   // Compliant

有时可能需要区分变量是否存在,用空指针表示不存在,并通过资源分配创建变量的方式属于低效实现,不妨改用变量的特殊值表示变量的状态,在 C++ 代码中也可使用 std::optional 实现相关功能。

相关

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