我正在阅读 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++ 中的工作方式吗?
希望我已经很好地解释了我的困惑。提前致谢!