4

为了给std::shared_ptr给定的类型创建一个T,有两种方法:std::allocate_sharedstd::make_shared
主要区别(或者至少,我对此问题感兴趣的那个)是前者通过给定分配器的副本进行所有内存分配。

从文档中,std::allocate_shared具有以下签名:

template< class T, class Alloc, class... Args >
shared_ptr<T> allocate_shared( const Alloc& alloc, Args... args );

另一方面,std::make_shared被描绘为:

template< class T, class... Args >
shared_ptr<T> make_shared( Args&&... args );

对于他们俩来说,都指出:

args... - 构造 T 实例的参数列表。

从现在开始,一切似乎都是正确的(额外的分配器、参数等)。
无论如何,据我所知,他们都应该将参数声明为通用引用,但事实并非如此(至少,从我在文档中看到的)。

换句话说,签名不std::allocate_shared应该是以下吗?

template< class T, class Alloc, class... Args >
shared_ptr<T> allocate_shared( const Alloc& alloc, Args&&... args );

他们不同是正确的还是那个网站的错误?
如果这是第一种情况,我在推理中遗漏了什么?

4

0 回答 0