为什么要转发的args的make_shared和allocate_shared签名不同?

时间:2016-02-17 12:44:40

标签: c++ c++11 perfect-forwarding make-shared universal-reference

为了为给定类型np.all(res1[np.lexsort(res1.T), :] == res3) 创建std::shared_ptr,其他方法有两种:std::allocate_sharedstd::make_shared
主要区别(或者至少是我对这个问题感兴趣的那个)是前者通过给定分配器的副本进行所有内存分配。

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

std::allocate_shared

另一方面,template< class T, class Alloc, class... Args > shared_ptr<T> allocate_shared( const Alloc& alloc, Args... args ); 被描述为:

std::make_shared

对于他们两人,都说:

  

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

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

换句话说,template< class T, class... Args > shared_ptr<T> make_shared( Args&&... args ); 的签名不应该是以下内容吗?

std::allocate_shared

他们是不同的或者是该网站的错误吗? 如果这是第一个案例,我在推理中错过了什么?

0 个答案:

没有答案