Предоставляет ли стандартная библиотека C ++ 11 какие-либо утилиты для преобразования из a std::shared_ptr
в std::unique_ptr
или наоборот? Это безопасная операция?
c++
c++11
shared-ptr
unique-ptr
Hind Forsum
источник
источник
shared_ptr
.Ответы:
Короче говоря, вы можете легко и эффективно преобразовать
std::unique_ptr
в,std::shared_ptr
но не можете преобразоватьstd::shared_ptr
вstd::unique_ptr
.Например:
std::unique_ptr<std::string> unique = std::make_unique<std::string>("test"); std::shared_ptr<std::string> shared = std::move(unique);
или:
std::shared_ptr<std::string> shared = std::make_unique<std::string>("test");
источник
std::unique_ptr
дляstd::shared_ptr
.std::unique_ptr
на astd::shared_ptr
? Стандартная библиотека определяет оператор присваивания перемещенияtemplate<class Y, class Deleter> shared_ptr& operator=(std::unique_ptr<Y, Deleter>&& r);
дляstd::shared_ptr<T>
.Учитывая unique_ptr u_ptr, создайте shared_ptr s_ptr:
std::shared_ptr<whatever> s_ptr(u_ptr.release());
Идти другим путем нецелесообразно.
источник
std::shared_ptr<whatever> s_ptr(std::move(u_ptr));
std::shared_ptr<whatever> s_ptr{std::move(u_ptr)};
Deleter
хранится внутриunique_ptr