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也不允许这样做,因为它已经将构造函数的参数作为参数。
任何想法?
答案 0 :(得分:3)
它不会让生活变得更轻松,因为人为地限制shared_ptr
的任何客户端要么绑定到一个特定的分配器类型,要么通过在分配器类型上模板化。
只有一些构造函数和函数(例如一些reset
重载)需要知道用于分配共享对象的分配器。许多客户可以愉快地与分配器无关。
在类型上具有较少的模板参数是 less 约束。请注意,类型上的模板参数通常必须明确指定,而在函数模板上通常可以从参数中推断出它们。