Только что случилось со мной, я задавался вопросом, как ресурсы освобождаются в следующем случае.
class Base {
Resource *r;
public:
Base() { /* ... */ }
~Base() {
delete r;
}
};
class Derived : public Base {
public:
Derived() { /* ... */ }
~Derived() {
/* Suddenly something here throws! */
}
};
int main() {
try {
Derived d;
} catch(...) {
/* what happened with Base::r !? */
}
}
Будет вызван деструктор базового класса, если вызывается деструктор производного класса? Или будет утечка?