在实现函数时,你可能想要动态分配内存(使用 CRType* poRaw = new CRType;),并打算在函数结束时释放这些内存(使用 delete poRaw;)。但是,如果在函数执行过程中抛出未处理的异常,这样做会导致内存泄漏。

为了避免这种情况,你可以将局部变量的类型从原始指针改为局部对象变量初始化CRSmart poSmart(new CRType);)。无论是正常执行完函数还是由于异常,poSmart 离开作用域时,这个局部对象的析构函数都会被调用。因此,我们可以将释放内存的责任从手动编写的函数中转移到这个 CRSmart 智能指针类的析构函数中。

C++ 提供了几种内置的智能指针类,它们的工作原理类似于此。

最后修改: 2025年01月28日 星期二 00:50