Context
Ошибка, приведенная ниже, говорит мне, что я не могу вернуть свой unique_ptr
с именем m_head
из этой функции get. Я просто хочу вернуть свои unique_ptr
m_head
без передачи права собственности.
Я полностью избегал необработанных указателей с тех пор, как познакомился с интеллектуальными указателями, поскольку необработанные указатели не являются безопасными исключениями, имеют накладные расходы на управление памятью и другие известные мне проблемы. Может быть, есть такие случаи, когда я должен использовать их кратко в небольшом объеме?
В этом я думаю, что вместо моего нынешнего подхода мне нужно передать право собственности. Вместо этого я должен получить объект, управляемый unique_ptr
, создать новый shared_ptr
для управления объектом, затем вернуть shared_ptr
, но мне нужно подтверждение. Я думаю, что это может быть так, потому что std :: unique_ptr документы говорят:
объекту unique_ptr принадлежит свой указатель однозначно: никакое другое средство не должно
позаботьтесь об удалении объекта, и, следовательно, никакого другого управляемого указателя
должен указать на его управляемый объект, так как как только они должны,
Объекты unique_ptr удаляют свой управляемый объект без учета
учитывает, указывают ли другие указатели на тот же объект или нет,
и, следовательно, оставляя любые другие указатели, указывающие на
неверное местоположение .
Error
`function "std::unique_ptr<_Ty, _Dx>::unique_ptr(const std::unique_ptr<_Ty, _Dx> &)
[with _Ty=mrobsmart::LinkedList::Node, _Dx=std::default_delete<mrobsmart::LinkedList::Node>]"
(declared at line 2337 of "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\include\memory")
cannot be referenced -- it is a deleted function
Код
#include <memory>
class LinkedList
{
private:
std::unique_ptr<Node> m_head;
public:
LinkedList(int data) {
m_head = std::make_unique<Node>(data);
}
const std::unique_ptr<Node> get_head() { return m_head; }
};