将 std::unique_ptr 与标准容器一起使用

发布于 2024-10-11 02:00:51 字数 242 浏览 3 评论 0 原文

当我意识到 C++11 添加了 unique_ptr 时,我一直在寻找一种方法来实现动态指针的安全向量和映射。我在谷歌上研究了如何使用它们,但没有成功地找到细节。我需要知道以下内容:

  1. 除了自动内存收集之外,指针和 unique_ptr 之间到底有什么不同?
  2. 我该如何从矢量或地图中删除 unique_ptr ?除了擦除迭代器之外,我还必须使用任何特殊代码吗?

I've been looking for a way to do safe vectors and maps of dynamic pointers, when I realized C++11 adds unique_ptrs. I looked into how to use them on Google, but have been unsuccessful in looking for details. What I need to know are the following:

  1. What, exactly, is different between pointers and unique_ptrs besides automatic memory collection?
  2. How would I go about removing a unique_ptr from a vector or map? Is there any special code I have to use besides erasing the iterator?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

溺渁∝ 2024-10-18 02:00:51
  1. 没有什么。 unique_ptr 只是指针的包装器,当 unique_ptr 被销毁时,它会删除指针。它没有任何开销(就像它所替换的 auto_ptr 模板一样)。
  2. 不——它会起作用的。困难实际上来自于将指针插入到矢量或地图中——而您必须unique_ptr移动到容器中。
  1. Nothing. A unique_ptr is just a wrapper around a pointer, which deletes the pointer when the unique_ptr is destroyed. It has no overhead (just like the auto_ptr template it replaces).
  2. Nope -- it will just work. The difficulty actually comes from inserting the pointer into the vector or map -- whereas you must move the unique_ptr into the container.
扬花落满肩 2024-10-18 02:00:51
  1. 不同之处在于 unique_ptr 遵循移动语义。此外,顾名思义,您无法复制它。

  2. 删除std::vector的元素> 将有效删除指针所指向的任何内容。

  1. The difference is that unique_ptr obeys move semantics. Further, as the name suggests, you can't make copies of it.

  2. Erasing an element of std::vector<std::unique_ptr<T> > will effectively delete whatever that pointer pointed at.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文