tl; dr: Никогда не делайте этого!
Почему? Поскольку std::string
владеет памятью, которую он использует в качестве буфера: строка освобождает эту память, когда она разрушается (если она не находится внутри самого строкового объекта - оптимизация для малых строк); и он может перераспределить его, чтобы отразить изменения в содержимом строки. Но - unique_ptr также владеет памятью, на которую указывает, т.е. он также отвечает за ее освобождение при разрушении.
Итак, если вы создаете уникальный указатель, указывающий на буфер строки, возможно произойдет одно из двух:
- Вы попытаетесь получить доступ к свободной памяти
- Вы попытаетесь дважды освободить один и тот же участок памяти
... так что не делай этого.