std::make_unique<Class1>();
std::unique_ptr<Class2> ptr2 std::make_unique<Class2>();
...
if (...) {
ptr2.reset(std::make_unique<Class2>(ptr1.get()));
ptr2->Func1(...);
ptr1.reset(std::make_unique<Class1>(*ptr2->Func2()));
}
работать не будет? ptr1 удалит объект раньше, чем инициализирует новый через функцию из старого?
У тебя был другой пример, а это не скопилируется, не хватает * перед get(). Исправишь ошибки и будет работать
А зачем, кстати, разыменовывать? reset же поинтер ждет🤷♂
У тебя было new MyClass(uptr->get()) Здесь не хватает разыменования. Ты дважды редактировал пример.
Обрати внимание как ты делаешь копию класса, ты get() как параметр конструктора передаешь, здесь должно быть *get()
Аа сори, а с ptr.reset(make_unique<...>(...)) тогда как быть? ptr.reset((make_unique<... >(...))). get()) ?
ptr = std::make_unique<Class>(*ptr);
что значит *get()?
Какое-то шаманство😂
Т. Е. c make_unique reset не используется?
Там через new предлагают
На странице с каждым классом есть ссылка на описание и перегрузки каждого метода. Нажимаешь на reset и читаешь, какие есть варианты
Это понятно, но как же правило никаких new?
Правило не "никаких new", а никаких сырых new...delete
А что с ним не так?
Вот, пример создания копии
Снова висячий указатель в итоге в ptr
Ну с reset . Я понял, что его в моём случае можно не использовать, но все-таки
Если reset, то new
А .get() new не заменит?
Я уже писал об этрм
Если только release, но вот make_unique + release - ужасная вещь, о которой даже задумываться не надо, не то, что писать такое
Я скорее с теоретической точки зрения
Если же хочется понять, как на твой вопрос ответить, то сначала ответь на вопросы: как работает make_unique, что происходит при разрушении unique_ptr и как работает get?
Обсуждают сегодня