Информация об изменениях

Сообщение Как принимать std::unique_ptr в функцию? от 02.12.2017 22:51

Изменено 02.12.2017 22:53 Basil2

Как принимать std::unique_ptr в функцию?
Допустим, у меня есть иерархия классов IWidget. Классы создаются фабрикой:
unique_ptr<IWidget> CreateWidget(...);
и далее хранятся или как сам unique_ptr, или как vector<unique_ptr>.

И есть у меня свободные функции, который этот виджет принимают. Сейчас это так:
void DisplayWidget(const IWidget&);
void ChangeWidget(IWidget&);
Но, естественно, для передачи в них моих виджетов, указатель все время приходится разыменовывать.

Вопрос:

Имеет ли смысл делать сигнатуру функций как-то иначе?
Если да, то как?
Как принимать std::unique_ptr в функцию?
Допустим, у меня есть иерархия классов IWidget. Классы создаются фабрикой:
unique_ptr<IWidget> CreateWidget(...);
и далее хранятся или как сам unique_ptr, или как vector<unique_ptr>.

И есть у меня свободные функции, который этот виджет принимают. Сейчас это так:
void DisplayWidget(const IWidget&);
void ChangeWidget(IWidget&);
Но, естественно, для передачи в них моих виджетов, указатель все время приходится разыменовывать.

Вопрос:

Имеет ли смысл делать сигнатуру функций как-то иначе?
Если да, то как?


P.S. Я частично прочитал Мейерса "Effective Modern C++": там поется ода unique_ptr вообще и его применению в фабриках в частности, но вот что делать дальше я не нашел (в разделе про умные указатели).