Я пытаюсь «модернизировать» существующий код.Передача unique_ptr в функции
- У меня есть класс, который в настоящее время имеет переменную-член «Устройство * устройство_».
- Он использует новое для создания экземпляра в некотором коде инициализации и имеет «delete device_» в деструктории.
- Функции-члены этого класса звонят многие другие функции, которые принимают устройство * в качестве параметра.
Это хорошо работает, но «модернизировать» мой код, я думал, что я должен изменить переменную быть определена как "std::unique_ptr<Device> device_"
и удалить явный вызов удаления, что делает код более безопасным и в целом лучше.
Мой вопрос заключается в следующем -
- Как я должен затем передать устройство _ переменной для всех функций, которые нуждаются в ней в качестве В параметре?
Я могу позвонить .get, чтобы получить необработанный указатель в каждом вызове функции. Но это кажется уродливым и отпугивает некоторые причины использовать unique_ptr в первую очередь.
Или я могу изменить каждую функцию так, что вместо того, чтобы параметр типа «Device *» теперь принимает типа В параметре «станд :: unique_ptr &». Который (для меня) несколько запутывает прототипы функций и затрудняет их чтение.
Что лучше всего подходит для этого? Я пропустил другие варианты?
Почему бы это изменение сделать код более безопасным и вообще лучше? Из вашего описания я бы сказал, что все наоборот. –
@James Kanze Я согласен, unique_ptr, похоже, ничего не покупает в этом случае. – juanchopanza
Вы вполне можете быть правы. Мне нравится «безопасность» unique_ptr в том, что вам не нужно забывать его удалять, но в этом случае у него есть определенная стоимость. – jcoder