gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:49:47 26 4
gpt4 key购买 nike

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)到一个特定的分配器类型,要么通过在分配器类型上模板化自身。

只有一些构造函数和函数(例如一些 reset 重载)需要知道用于分配共享对象的分配器。许多客户端可以愉快地与分配器无关。

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com