跳转到内容

C++ 语言/间接/智能指针/原始指针的风险

来自维基教科书,开放的书籍,开放的世界

在实现其中一个函数时,您可能希望动态分配内存(使用 CRType* poRaw = new CRType;),您打算在函数结束时释放内存(使用 delete poRaw;)。但是,如果在函数执行过程中抛出未处理的异常,这将导致内存泄漏。

除了将局部变量的类型设置为原始指针外,还可以将其设置为局部对象变量(初始化为 CRSmart poSmart(new CRType);)。每当 poSmart 超出范围(即使是由于异常)时,该局部对象的析构函数都会被调用。因此,我们可以将执行 delete 的责任从我们手动编写的函数转移到这个 CRSmart "智能指针" 类的析构函数中。

C++ 提供了一些内置的智能指针类,它们的工作原理类似。

有关使用原始指针的风险的更多信息

华夏公益教科书