К сожалению, std :: string выполняет свое собственное управление памятью и не может повторно использовать неправильно помещенную строку.
Вы можете скопировать их в std :: string и сразу же удалить их, но это вызовет всеповедения, которые вы пытаетесь избежать.
Что вы можете сделать, это немедленно объявить unique_ptr с пользовательским удалителем.Когда это выйдет из области видимости, он вызовет средство удаления, которое будет free()
.Между тем, вы можете использовать его так же, как если бы вы использовали необработанный указатель.
std::unique_ptr<char, decltype(free)*> RAII(makeAPICall(), free);
В будущем вы можете создать собственную оболочку для std :: string_view, и, возможно, есть преимущество в прокруткевладеть в краткосрочной перспективе, но если у вас нет более новой библиотеки stdlib (c ++ 17), которая реплицировала все методы для взятия string_view, я считаю, что это бесполезное упражнение.