Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- class Greeter {
- public:
- Greeter(const string& name)
- : name_(name) // Сохраняем name_ внутри
- {
- cout << "Hello, "s << name_ << endl;
- }
- ~Greeter() {
- cout << "Goodbye, "s << name_ << endl;
- }
- private:
- string name_;
- };
- // вывод 1) когда в { ... } происходит выбрасывание исключения, в этом { ... } разрушатся объекты,
- // только если исключение где-то ловится;
- void Test2() {
- Greeter e{"Test-E"s};
- cout << "Throwing an exception from Test2()"s << endl;
- throw domain_error("oops error!");
- }
- void Test() {
- Greeter a{"Test-A"s};
- Greeter b{"Test-B"s};
- try {
- Greeter c{"Test-C"s};
- try {
- Greeter d("Test-D"s);
- Test2();
- } catch(const overflow_error& e) {
- cout << "overflow_error: "s << e.what() << endl;
- throw;
- }/* catch (...) {
- throw;
- } */
- } catch (const runtime_error& e) {
- cout << "runtime_error: "s << e.what() << endl;
- throw;
- }/* catch(...) {
- throw;
- } */
- }
- int main() {
- Greeter greeter_main{"main"s};
- try {
- Greeter outer{"outer"s};
- try {
- Greeter inner{"inner"s};
- try {
- Greeter inner_inner("inner-inner"s);
- Test();
- } catch(const length_error& e) {
- cout << "length_error: "s << e.what() << endl;
- throw;
- }/* catch (...) {
- throw;
- } */
- } catch (const runtime_error& e) {
- cout << "runtime_error: "s << e.what() << endl;
- throw;
- }
- } catch (const overflow_error& e) {
- cout << "overflow_error: "s << e.what() << endl;
- throw;
- }/* catch (...) {
- // throw; // если раскомментировать, то greeter_main не разрушится
- } */
- cout << "------"s << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement