У меня первая попытка использовать C++11 unique_ptr
; Я заменяю полиморфный необработанный указатель внутри моего проекта, который принадлежит одному классу, но довольно часто передается.
Раньше у меня были такие функции, как:
bool func(BaseClass* ptr, int other_arg) {
bool val;
// plain ordinary function that does something...
return val;
}
Но вскоре я понял, что не смогу перейти на:
bool func(std::unique_ptr<BaseClass> ptr, int other_arg);
Потому что вызывающая сторона должна будет обрабатывать указатель на функцию, чего я не хочу. Итак, какое лучшее решение моей проблемы?
Я думал о передаче указателя в качестве ссылки, например:
bool func(const std::unique_ptr<BaseClass>& ptr, int other_arg);
Но я чувствую себя очень неловко при этом, во-первых, потому что кажется не инстинктивным передавать что-то уже набранное как _ptr
в качестве ссылки, что было бы ссылкой на ссылку. Во-вторых, потому что сигнатура функции становится еще больше. В-третьих, потому что в сгенерированном кодебыло бы необходимо два последовательных косвенных указателя, чтобы добраться до моей переменной.