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

#include <iostream>
#include <memory>
#include <stdexcept>
#include <vector>

using std::auto_ptr;
using std::vector;

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

vector<int>* make_vec()    // Tworzy pełny wektor.
{
    auto_ptr< vector<int> > p(new vector<int>); // Alokacja w pamięci wolnej.
    // Napełnia wektor danymi. Tu może zostać zgłoszony wyjątek.
    return p.release(); // Zwraca wskaźnik przechowywany przez p.
}

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

int main()
try
{
    auto_ptr< vector<int> > p(make_vec());
}
catch (std::exception& e) {
    std::cerr << "Błąd: " << e.what() << '\n'; 
    return 1;
}
catch (...) {
    std::cerr << "Ojej: nieznany wyjątek!\n"; 
    return 2;
}

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