shared_ptr определяется как
template< class T > class shared_ptr;
пользовательский распределитель передается как аргумент конструктора
template< class Y, class Deleter, class Alloc >
shared_ptr( Y* ptr, Deleter d, Alloc alloc );
Почему нет
template< class T, class Alloc = std::allocator<T> > class shared_ptr;
?
У меня такое ощущение, что в некоторых случаях это облегчает жизнь, но, с другой стороны, мешает делать что-то вроде:
namespace App{
template <typename T>
using Shared = std::shared_ptr<T,myAllocator<T>>; //pool allocator for control blocks
}
Также make_shared не позволяет этого, потому что уже принимает в качестве аргументов аргументы конструктора.
Любые идеи?