правила вывода для std::shared_ptr
Материал из cppreference.com
< cpp | memory | shared ptr
Определено в заголовочном файле <memory>
|
||
template< class T > shared_ptr( std::weak_ptr<T> ) -> shared_ptr<T>; |
(1) | (начиная с C++17) |
template< class T, class D > shared_ptr( std::unique_ptr<T, D> ) -> shared_ptr<T>; |
(2) | (начиная с C++17) |
Эти правила вывода предоставляются для std::shared_ptr для учёта пограничных случаев, пропущенных неявными правилами вывода.
Обратите внимание, что нет вывода аргумента шаблона класса из типов указателей, потому что невозможно отличить указатели, полученные из форм new для массивов и не для массивов.
[править] Пример
Запустить этот код
#include <memory> int main() { auto p = std::make_shared<int>(42); std::weak_ptr w{p}; // в этом случае используется явное правило вывода std::shared_ptr p2{w}; // в этом случае используется явное правило вывода }