pointers - 如何构造指向某个字符串的唯一指针
问题描述
给定一个字符串 s 例如auto s = std::string("hello")
,您将如何编写代码来创建一个指向该字符串的创建副本的唯一指针(不一定是 s) - 我尝试了许多变体,auto ptr = std::make_unique<std::string>(s)
但似乎没有任何效果。
解决方案
tl;博士:永远不要那样做!
为什么?因为 anstd::string
拥有它用作缓冲区的内存: 字符串在被破坏时释放此内存(如果它不在字符串对象本身 - 小字符串优化);它可能会重新分配它以反映字符串内容的变化。但是 - unique_ptr也拥有它指向的内存,即它还负责在被破坏时释放它。
因此,如果您创建一个指向字符串缓冲区的唯一指针,则可能会发生以下两种情况之一:
- 您将尝试访问已释放的内存
- 您将尝试两次释放同一段内存
...所以,真的,不要那样做。
推荐阅读
- python - 给定一长串单词和列表句子,找到包含至少一个单词的句子的最优化方法是什么
- ruby-on-rails - 如何在 rails activerecord 中播种 sqlite3 数据库?
- python - 在另一个方法中调用一个方法错误
- python - 如何通过 Postman 获取 XML 格式的 POST 请求正文作为 Flask 中的字典?
- git - 如何检测*合并提交*是否已经在分支中被选中?
- wordpress - 我试图在 wordpress 中创建基于令牌的身份验证
- python - Django在基于foreginKey值的模板中使用条件?
- azure - 尝试推送到 Azure 容器实例时出现 Docker Compose 错误
- python - 使用机器学习模型进行推理时如何使用 UUID?
- python - Cron 无法通过 Python 找到 selenium 的 Chromedriver 的可执行路径