CppCoreGuidelines ES.24 使用 unique_ptr 管理指针
31 March 2023
“Use a unique_ptr<T> to hold pointers”
理由
使用std::unique_ptr
是避免内存泄漏最简单的方法。非常可靠。让类型系统做尽可能多的工作确保所有权安全。增加可读性。几乎没有运行时开销。
例子
void use(bool leak) { auto p1 = make_unique<int>(7); // OK int* p2 = new int{7}; // bad: might leak // ... no assignment to p2 ... if (leak) return; // ... no assignment to p2 ... vector<int> v(7); v.at(7) = 0; // exception thrown // ... }
如果leak == true
那么, p2
指向的对象就内存泄漏了。然而, p1
指向的对象不会泄漏。在at()
处发生异常的话,也会发生同样的情况。
强化
检查以下给原始指针赋值的情况: new
, malloc()
以及返回指针的函数。