Cory Nelson wrote:
It would be useful if shared_ptr and family provided a way to give a custom allocator. For instance, to replace the quick allocator with a lock-free one.
boost::shared_ptr is already ready to accept allocators: http://www.boost.org/libs/smart_ptr/shared_ptr.htm template<class Y, class D> shared_ptr(Y * p, D d); template<class Y, class D, class A> shared_ptr(Y * p, D d, A a); Requirements: p must be convertible to T *. D must be CopyConstructible. The copy constructor and destructor of D must not throw. The expression d(p) must be well-formed, must not invoke undefined behavior, and must not throw exceptions. A must be an Allocator, as described in section 20.1.5 (Allocator requirements) of the C++ Standard. Effects: Constructs a shared_ptr that owns the pointer p and the deleter d. The second constructor allocates memory using a copy of a. Postconditions: use_count() == 1 && get() == p. Throws: std::bad_alloc, or an implementation-defined exception when a resource other than memory could not be obtained. Exception safety: If an exception is thrown, d(p) is called. Notes: When the the time comes to delete the object pointed to by p, the stored copy of d is invoked with the stored copy of p as an argument. Regards, Ion