避免不必要的内存分配
2.22 ID_unnecessaryAllocation
对单独的基本变量或只包含少量基本变量的对象不应使用动态内存分配。
示例:
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 实现相关功能。