Джеймс уже ответил на вопрос. Итак, это всего лишь предложение. Если вы знаете, что вызов функции не изменяет объект (например, устанавливает некоторые элементы данных и т. Д.), Вы можете создать новый объект из вашего необработанного указателя и передать его через shared_ptr функции. Таким образом, вы предполагаете, что функция становится владельцем объекта и выполняет все, что требуется. Конечно, это не сработает, если функция изменит объект в нем. Это может работать, если функция использует объект только для чтения для выполнения какой-либо другой операции (например, файловый ввод / вывод, например)