shared_ptr <const A> to shared_pointer <A> - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть функция, которая возвращает общий указатель типа const A.

std::shared_ptr< const A> getPointer() const;

, и у меня есть функция, которой нужен shared_ptr типа A.

void foo(std::shared_ptr<A> a);

Когда я пытаюсь вызвать мою функцию, я получаю следующее сообщение:

ошибка: нет жизнеспособного преобразования из shared_ptr в shared_ptr '

Мне плевать на производительность.Эта строка кода находится в графическом интерфейсе и никоим образом не является частью какого-либо горячего кода.(Это означает, что мне все равно, создаю я копию A или нет)

Какое самое простое решение, чтобы это исправить?

1 Ответ

0 голосов
/ 12 ноября 2018

https://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast

foo(std::const_pointer_cast<A>(getPointer()));

Если ваша функция изменит указатель, и вы не хотите, чтобы это произошло:

auto ptr = std::make_shared<A>(*(getPointer().get()));
foo(ptr);

Отказ от ответственности:

Первый вариант представляет риск, если foo изменяет полученный указатель.

Второй вариант создает копию всего объекта и требует конструктора копирования.

...