
Joel Eidsath wrote:
My main purposes right now are familiarizing myself with Boost.
From reading the header file for aligned_storage, I believe that I understand how to do what you're suggesting, although I admit that I am somewhat shaky -- I'd have to figure it out by implementing it, I think.
But correct me if I'm wrong: I don't think that it would be possible to use purge_memory to destruct everything at once like that. You'd have to destruct everything individually.
I haven't personally worked with the pool allocators much, so perhaps my suggestion was misplaced. I was thinking that you wanted a pool that allocated only enough memory for a single instance, rather than a single instance of a pool that could store many objects. Anyhow, to use aligned_storage like I was thinking, you might do something like: template < typename Type > class SingletonPool { private: typename boost::aligned_storage < Type >::type mem; bool exists; Type * pmem; public: SingletonPool ( ) : exists ( false ) , pmem ( reinterpret_cast<Type *>( &mem ) ) { } Type * instance ( ) { if ( !exists ) { new ( pmem ) Type ( ); exists = true; } return pmem; } void release ( ) { if ( exists ) { pmem->~Type ( ); exists = false; } } ~ SingletonPool ( ) { release ( ); } }; But this probably wasn't what you were after... -Jason