std::shared_ptr
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Modifiers | ||||
| Observers | ||||
(C++17) | ||||
(until C++20*) | ||||
(C++26) | ||||
(C++26) | ||||
| Non-member functions | ||||
(until C++20)(until C++20)(until C++20)(until C++20)(until C++20)(C++20) | ||||
functions(until C++26*) | ||||
| Helper classes | ||||
(C++20) | ||||
| Deduction guides(C++17) |
Defined in header <memory> | ||
template<class T> shared_ptr(std::weak_ptr<T>)-> shared_ptr<T>; | (1) | (since C++17) |
template<class T,class D> shared_ptr(std::unique_ptr<T, D>)-> shared_ptr<T>; | (2) | (since C++17) |
Thesededuction guides are provided forstd::shared_ptr to account for the edge cases missed by the implicit deduction guides.
Note that there is no class template argument deduction from pointer types because it is impossible to distinguish pointers obtained from array and non-array forms ofnew.
#include <memory> int main(){auto p=std::make_shared<int>(42);std::weak_ptr w{p};// explicit deduction guide is used in this casestd::shared_ptr p2{w};// explicit deduction guide is used in this case}