【问题标题】:C++ std::unique_ptr with STL container带有 STL 容器的 C++ std::unique_ptr
【发布时间】:2018-09-30 01:06:11
【问题描述】:

我得到了一段代码,它使用 std::set 来保存一堆指针。

我用它来确保每个指针在我的容器中只会出现一次。

然后,我听说 std::unique_ptr 确保指针在我的整个代码中只存在一次,而这正是我所需要的。

所以我的问题很简单,我应该将容器类型更改为 std::vector 吗?或者它不会改变任何留下 std::set 的东西?

【问题讨论】:

  • std::unique_ptr 不能确保只有一个指针指向某个地址。
  • 是的,但是如果我使用 new std::unique_ptr(new ...()) 或 std::make_unique( ... ) ?
  • 容器应该拥有指针指向的对象吗?你甚至首先需要指针吗?
  • 你在使用 make_unique 时非常安全。但是你在任何时候都不会得到完全的安全。 IE。 auto x = new xyz(); auto a = unique_ptr(x), b = unique_ptr(x); 并且不要使用 new 创建 unique_ptr,您将失去智能指针给您的优势。
  • Timo,我可以接受新的 xyz() 示例。

标签: c++11 stl unique-ptr


【解决方案1】:

我认为你的集合所做的工作可能与 unique_ptr 不同。

您的设置可能会记录一些事件,并确保为每个触发的对象仅记录 1 个事件,非常宽松地使用这些术语。
一个示例可能是通过网格进行跟踪并记录通过的所有节点。
对象本身已经存在并在别处拥有。

unique_ptr 的目的是保证动态分配的对象只有一个所有者,并保证对象的自动销毁。您的对象已经拥有所有者,它们不需要新的所有者!

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多