// Copyright {Jagger Software Limited} 2003 #ifndef OWNERSHIP_DELETER_INCLUDED #define OWNERSHIP_DELETER_INCLUDED namespace ownership { struct deleter // <> { template void operator()(type deleting) const { delete deleting; } }; } #endif //----------------------------------------------------------- // Example of use #if 0 // example/container.hpp #ifndef EXAMPLE_CONTAINER_INCLUDED #define EXAMPLE_CONTAINER_INCLUDED #include namespace example { class wibble; class container { public: // 'tors container() ~container(); //... public: // end element access void push_back(const wibble & pushed); //... private: // state std::vector wibbles; }; } #endif //--------------------------------------- // example/container.cpp #include "example/container.hpp" #include "example/wibble.hpp" #include "ownership/deleter.hpp" #include namespace example // container - 'tors { container::container() : wibbles() { } container::~container() { std::for_each(wibbles.rbegin(), wibbles.rend(), ownership::deleter()); } } //... namespace example // container - end element access { void container::push_back(const wibble & copied) { wibbles.push_back(new wibble(copied)); } } #endif