为什么shared_ptr类型没有模板分配器参数
Why shared_ptr type has no template allocator parameter?
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不允许这样做,因为它已经将构造函数的参数作为参数。
有什么想法吗?
它不会让生活更轻松,因为它会人为地限制任何shared_ptr
客户端绑定到一个特定的分配器类型或通过模板化分配给器类型来
只有一些构造函数和函数(例如,一些reset
重载)需要知道用于分配共享对象的分配器。许多客户可以愉快地成为分配者不可知论者。
类型上的模板参数较少,约束较少。请注意,类类型的模板参数通常必须显式指定,而函数模板上的模板参数通常可以从参数中推导出来。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- C++自定义分配器大小参数作为模板参数会引发编译器错误
- 如何在使用容器和字符串时强制使用显式分配器类型参数
- STD ::列表对其分配器参数有什么作用
- 为什么容器的分配器作为模板参数传递
- 我应该将分配器作为函数参数传递吗?(我对分配器的误解)
- 使用SWIG生成的Python库时,向量分配器参数错误
- 在C++容器中,作为模板参数提供的分配器和作为构造函数参数提供的分配程序之间的区别
- 函数模板由用于构建不同类型的容器的分配器参数化
- 为什么shared_ptr类型没有模板分配器参数
- 带有容器和默认分配器的模板模板参数:我可以让我的声明更紧凑吗
- 'Tag' boost::p ool_分配器和 boost::fast_pool_allocator 中的模板参数是否支持控制基础池的实例?
- 分配器作为向量和列表中的默认参数
- 为什么std::list要不带参数地调用我的分配器?
- 为什么分配器类型作为模板参数而不是 ctor 的参数?
- 用于分配器类型参数的C++设计模式