为什么 std::make_shared<T> 不是 std::shared_ptr<T> 的静态函数,即 std::shared_ptr<T>::make?

Pet*_*her 1 c++ language-design shared-ptr

这是一个关于理解设计决策的问题,而不是对错误或缺陷的抱怨。

在C++标准库中,创建共享指针及其对象的函数是直函数,

template< class T, class... Args> std::shared_ptr<T> make_shared( Args&&... args );
Run Code Online (Sandbox Code Playgroud)

为什么这个函数不是static的函数shared_ptr<T>,如下所示:

template <class... Args> std::shared_ptr<T>::make(Args&&... args);
Run Code Online (Sandbox Code Playgroud)

这将使std::命名空间更加整洁,并且还允许这样的事情:

using shared_vector = std::shared_ptr<std::vector<int>>;

shared_vector a = shared_vector::make(7);
Run Code Online (Sandbox Code Playgroud)

use*_*522 5

std::make_shared文档N2351的提案中给出的唯一理由是,它可以将功能非侵入性地添加到任何现有的shared_ptr.

std::make_shared之后被添加到标准草案中std::shared_ptr,并且之前已经有shared_ptr实现,例如在 boost 中。