c++ - 为什么shared_ptr类型没有模板分配器参数?

标签 c++ c++11 std shared-ptr allocator

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 的任何客户端要么绑定(bind)到一种特定的分配器类型,要么通过在分配器类型上模板化来绑定(bind)自身。

只有某些构造函数和函数(例如某些 reset 重载)需要了解用于分配共享对象的分配器。许多客户端很乐意与分配器无关。

类型上的模板参数越少,约束就越少。请注意,类类型上的模板参数通常必须显式指定,而函数模板上的模板参数通常可以从参数中推导出来。

关于c++ - 为什么shared_ptr类型没有模板分配器参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20921733/

相关文章:

c++ - 精神过程如何规则?

c++ - 每个循环的区别

c++ - 为什么我不能访问这个 uchar 数组?

c++ - Lambda 捕获 'this' 保存为 std::function

c++ - "multiple overloads"使用具有重复类型的模板类

c++ - 强制打印到终端(正在传输 std::cout)

c++ - libstdc++ 中关于 std::list 赋值的错误?

c++ - std::ranges 中是否有谓词适配器/构建器?

c++ - MSVS 2015 : vector<bool> has no 'data' member

c++ - 继承构造函数在 C++ 中有多大用处?