如何构造一个指向某个字符串的唯一指针

how to construct a unique pointer that points to a certain string

给定一个字符串 s 例如auto s = std::string("hello"),您将如何编写代码来制作指向此字符串的已创建副本(不一定是 s)的唯一指针 - 我已经尝试了 auto ptr = std::make_unique<std::string>(s) 的多种变体,但似乎没有任何效果。

tl;dr:永远不要那样做!

为什么?因为 std::string 拥有 它用作缓冲区的内存:字符串在被破坏时释放此内存(如果它不在字符串对象本身内 - 小字符串优化) ;它可能会重新分配它以反映字符串内容的变化。但是 - unique_ptr 拥有它指向的内存,即它还负责在销毁时释放它。

因此,如果您创建一个指向字符串缓冲区的唯一指针,可能会发生以下两种情况之一:

  1. 您将尝试访问空闲的内存
  2. 您将尝试两次释放同一段内存

... 所以,真的,不要那样做。

这对我来说很好用:

    std::string s = "ABCDE";
    auto ptr = std::make_unique<std::string>(s);
    std::cout << s << std::endl;
    std::cout << *ptr << std::endl;
    s = "UVWXYZ";
    std::cout << s << std::endl;
    std::cout << *ptr << std::endl;

给我输出:

ABCDE
ABCDE
UVWXYZ
ABCDE

这就是您要实现的目标吗?