
Darren Cook wrote:
I've a class using the boost quick_allocator like this:
class Chain{ //... void* operator new(std::size_t sz){ return boost::detail::quick_allocator<Chain>::alloc(sz); } void operator delete(void *p,std::size_t sz){ boost::detail::quick_allocator<Chain>::dealloc(p,sz); } //... };
I've started using valgrind ( http://valgrind.kde.org/ ) to look for memory problems in my unit tests and it is complaining that the memory is never released.
Now I understand this: // "Listen to me carefully: there is no memory leak" // -- Scott Meyers, Eff C++ 2nd Ed Item 10
But is there some function I can call at the end of my program to: a) confirm I've called dealloc() for every alloc() and that the next pointer is currently at start
No, sorry. This would require quick_allocator to keep too much debugging information. It is not a debugging tool. Use a different allocator in valgrind/test builds. This might be easier if I add something like BOOST_QA_USE_MALLOC to make quick_allocator just forward alloc/dealloc to malloc/free.
b) release the memory.
Again, no, since currently quick_allocator does not keep track of its allocations (because it doesn't need to). I'll think about this.