,我读了智能指针有帮助的情况下,当构造产生一些例外。智能指针和构造异常
的问题是,构造有例外发生之前的一些资源,但析构函数不叫(和资源永久繁忙)。
但我不能正确它已了解。 我的代码:
#include <memory>
#include <iostream>
class resOwner {
public:
resOwner() {
std::cout << "Map some huge resources\n";
throw "hi";
}
~resOwner() {
std::cout << "Free some huge resources\n";
}
};
class normal : resOwner {
};
int main(){
try {
std::shared_ptr<resOwner> k (new resOwner());
} catch (...) {}
}
输出为Map some huge resources
。 如何用智能指针解决资源泄漏问题?
别担心 - 不从智能指针合作 - - 如果C-TOR抛出内存被释放,看到http://stackoverflow.com/questions/1674980/who-deletes-the-在 – PiotrNycz
中,无论resOwner拥有的资源必须是某种智能指针unique_ptr或shared_ptr等,否则最终会导致资源泄漏因为无论你计划在析构函数中清理什么都不会被调用。 – Arunmu
值得指出的是,如果一个构造函数运行到完成(构造函数委托)并且委托构造函数抛出,那么该对象的析构函数将被调用。 – Blazo