C++ 语言/间接/智能指针/原始指针的风险
外观
在实现其中一个函数时,您可能希望动态分配内存(使用 CRType* poRaw = new CRType;
),您打算在函数结束时释放内存(使用 delete poRaw;
)。但是,如果在函数执行过程中抛出未处理的异常,这将导致内存泄漏。
除了将局部变量的类型设置为原始指针外,还可以将其设置为局部对象变量(初始化为 CRSmart poSmart(new CRType);
)。每当 poSmart
超出范围(即使是由于异常)时,该局部对象的析构函数都会被调用。因此,我们可以将执行 delete
的责任从我们手动编写的函数转移到这个 CRSmart
"智能指针" 类的析构函数中。
C++ 提供了一些内置的智能指针类,它们的工作原理类似。