31 March 2023

C++ 核心指南目录

“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()处发生异常的话,也会发生同样的情况。

强化

检查以下给原始指针赋值的情况: newmalloc() 以及返回指针的函数。