跳到主要内容

std::shared_ptr 的推导指南

C++17
template< class T >
shared_ptr( std::weak_ptr<T> ) -> shared_ptr<T>;

template< class T, class D >
shared_ptr( std::unique_ptr<T, D> ) -> shared_ptr<T>;

这些推导指南是为 std::shared_ptr 提供的,以处理隐式推导指南所遗漏的边缘情况。

请注意,从指针类型中进行类模板参数推导是不可能的,因为无法区分从 new 的数组形式和非数组形式获得的指针。

示例

include <memory>

int main()
{
auto p = std::make_shared<int>(42);
std::weak_ptr w{p}; // explicit deduction guide is used in this case
std::shared_ptr p2{w}; // explicit deduction guide is used in this case
}

std::shared_ptr 的推导指南

C++17
template< class T >
shared_ptr( std::weak_ptr<T> ) -> shared_ptr<T>;

template< class T, class D >
shared_ptr( std::unique_ptr<T, D> ) -> shared_ptr<T>;

这些推导指南是为 std::shared_ptr 提供的,以处理隐式推导指南所遗漏的边缘情况。

请注意,从指针类型中进行类模板参数推导是不可能的,因为无法区分从 new 的数组形式和非数组形式获得的指针。

示例

include <memory>

int main()
{
auto p = std::make_shared<int>(42);
std::weak_ptr w{p}; // explicit deduction guide is used in this case
std::shared_ptr p2{w}; // explicit deduction guide is used in this case
}