首页 > 解决方案 > 如何构造指向某个字符串的唯一指针

问题描述

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

标签: pointersc++17unique-ptrstdstring

解决方案


tl;博士:永远不要那样做!

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

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

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

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


推荐阅读