// Copyright {Jagger Software Limited} 2003 #ifndef OWNERSHIP_SCOPED_INCLUDED #define OWNERSHIP_SCOPED_INCLUDED namespace ownership { template class scoped // <> { public: // 'tors explicit scoped(resource_type acquired); ~scoped(); public: // ownership resource_type get() const; resource_type release(); private: // inappropriate scoped(const scoped &); void operator=(const scoped &); private: // state resource_type acquired; bool is_released; }; } #include "ownership/scoped-template.hpp" #endif //-------------------------------------------------------- // Example of use #if 0 #include "ownership/array_deleter.hpp" #include "ownership/scoped.hpp" #include "ownership/fcloser.hpp" #include #include #include using namespace ::ownership; using namespace ::std; int main(int argc, char * argv[]) { scoped stream(fopen(argv[1], "rb")); const size_t file_size = file_size(stream.get()); scoped source(new char[file_size]); copy(FILE_iterator(stream.get()), end, source.get()); //... return 0; } #endif