0

我正在阅读 Scott Meyers Effective C++,我有一个关于资源管理的问题。在书中,他建议应该使用 auto_ptr 对象来管理内存,因为它会在超出范围时自动调用它所指向的对象的析构函数。这是提供的示例:

void f() {
    Investment *pInv = createInvestment();    // Call factory function
    ...                                       // use pInv
    delete pInv;                              // release object
}

他声称这可能是有问题的,因为可能会发生许多事情...会阻止该方法到达delete pInv(过早的返回语句、抛出的异常......)。这是他建议的代码

void f() {
    std::auto_ptr<Investment> pInv(createInvestment()); // call factory function
    ...                                                 // use pInv as before
}                                                       // automatically delete pInv

这是有效的,因为无论发生什么pInv都会在超出范围时被删除。

我的问题是:为什么pInv在第一个代码块中超出范围时不调用析构函数。过早的 return 语句不会将对象推出范围,或者这不是垃圾收集在 C++ 中的工作方式吗?

希望我已经很好地解释了我的困惑。提前致谢!

4

0 回答 0