Opened 12 years ago
Closed 12 years ago
#4277 closed Feature Requests (wontfix)
Ease access to underlying singleton_pool
Reported by: | Owned by: | Chris Newbold | |
---|---|---|---|
Milestone: | Boost 1.43.0 | Component: | pool |
Version: | Boost 1.44.0 | Severity: | Optimization |
Keywords: | Cc: | boostpool@… |
Description
It is not convenient to call singleton_pool<...>::release_memory() if you use pool_allocator or fast_pool_allocator. The reason is that the exact singleton_pool type has to be specified:
typedef boost::pool_allocator<int> myAllocator; std::vector<int, myAllocator> v; ... //do something and empty v again boost::singleton_pool<boost::pool_allocator_tag, sizeof(int)>::release_memory();
In fact the call to release_memory might need even more template arguments (because of user allocators etc). And: The developer has to know all template parameters. If the vector declaration changes the call to release_memory has to be changed too, otherwise it would still compile but have no effect. This is error-prone. It would be much easier if pool_allocator and fast_pool_allocator would provide a typedef for the used singleton_pool. Then the above code would look like this:
typedef boost::pool_allocator<int> myAllocator; std::vector<int, myAllocator> v; ... //do something and empty v again myAllocator::singleton_pool_type::release_memory();
The implementation in pool_alloc.hpp would look like this:
template <typename T, typename UserAllocator, typename Mutex, unsigned NextSize> class pool_allocator { public: typedef T value_type; typedef UserAllocator user_allocator; typedef Mutex mutex; ... typedef singleton_pool<pool_allocator_tag, sizeof(T), UserAllocator, Mutex, NextSize> singleton_pool_type; ...
Change History (3)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
Cc: | added |
---|
comment:3 by , 12 years ago
Resolution: | → wontfix |
---|---|
Status: | new → closed |
I agree with Steven - the actual type of the allocator used by a container is "unmentionable" - and indeed more than one such type may even be used.
Closing as won't fix.
I hesitate to add such a typedef because it isn't reliable.