
//
// To jest przykładowy kod z podrozdziału 26.3.3.2 „Zarządzanie zasobami” książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <stdio.h>

using namespace std;

//------------------------------------------------------------------------------

struct Bad_arg {};

//------------------------------------------------------------------------------

void do_resources1(int a, int b, const string& s) // marna funkcja
      // niezdyscyplinowane wykorzystanie zasobów
{
    FILE* f = fopen(s.c_str(),"r");    // Otwiera plik (styl języka C).
    int* p = new int[a];               // Alokuje trochę pamięci.
    if (b<=0) throw Bad_arg();         // Może zgłosić wyjątek.
    int* q = new int[b];       // Alokuje trochę więcej pamięci.
    delete[] p;                // Dealokuje pamięć wskazywaną przez p.
}

//------------------------------------------------------------------------------

void do_resources2(int a, int b, const string& s) // trochę lepsza funkcja
{
    ifstream is(s.c_str(),ios_base::in); // Otwiera plik.
    vector<int>v1(a);          // Tworzy wektor (posiadający pamięć).
    if (b<=0) throw Bad_arg(); // Może zgłosić wyjątek.
    vector<int> v2(b);         // Tworzy inny wektor (posiadający pamięć).
}

//------------------------------------------------------------------------------

int* var = 0;

//------------------------------------------------------------------------------

FILE* do_resources3(int a, int* p, const string& s) // marna funkcja
      // niezdyscyplinowane przekazywanie zasobów
{
    FILE* f = fopen(s.c_str(),"r");
    delete p;
    delete var;
    var = new int[27];
    return f;
}

//------------------------------------------------------------------------------

int main()
try
{
}
catch (exception& e) {
    cerr << "Błąd: " << e.what() << '\n'; 
    return 1;
}
catch (...) {
    cerr << "Nieznany wyjątek!\n"; 
    return 2;
}

//------------------------------------------------------------------------------
