问题标签 [unique-ptr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
183808 浏览

c++ - Why can I not push_back a unique_ptr into a vector?

What is wrong with this program?

The error:

0 投票
4 回答
65870 浏览

c++ - std::auto_ptr 到 std::unique_ptr

随着新标准的到来(某些编译器中已经有部分可用),新类型std::unique_ptr应该是std::auto_ptr.

它们的用法是否完全重叠(所以我可以对我的代码进行全局查找/替换(不是我会这样做,但如果我这样做了))还是我应该知道阅读文档中不明显的一些差异?

此外,如果它是直接替换,为什么要给它一个新名称而不仅仅是改进std::auto_ptr

0 投票
4 回答
10516 浏览

c++ - 从类方法 C++0x 返回一个 unique_ptr

如果我的类 SomeType 有一个从地图返回元素的方法(使用键)说

这将确保调用者会收到指向地图中的指针而不是副本的指针?这样做可以吗,还是会尝试调用复制构造函数(并且由于它已被删除而失败),因为它正在被返回?

假设我必须使用 unique_ptr 作为我的地图项。

更新::

在尝试实现代码之后,似乎 unique_ptr 和 std:map/:pair 在 gcc 4.4.4 中不能一起工作,pair 只是不喜欢 unique_ptr 作为类型参数。(请参阅无法创建 MoveConstructibles 的地图)。

我将 ptr 更改为 std::shared_ptr 并且一切正常。

我想我可以对共享指针使用相同的代码吗?

0 投票
1 回答
543 浏览

c++ - boost::Unique_Ptr 对象列表

为什么我不能这样做?

QueueList 是一个派生自 public boost::intrusive::list_base_hook<>使其成为侵入式链接列表的一部分的类。

我想使用 unique_ptr 能够在线程之间传递这个对象,并且当时只有 1 个单线程拥有这个对象的所有权。

编辑:错误:

错误 C2039: 'pointer' : is not a member of 'boost::intrusive::detail::default_list_hook' 请参阅 'boost::intrusive::detail::default_list_hook' 的声明 请参阅类模板实例化 'boost::intrusive ::list_impl' 正在使用 [ Config=boost::intrusive::listopt::value_traits,boost::intrusive::size_type::pack>::type,boost::intrusive::constant_time_size>::type>:: 编译大小类型,真>]

错误 C2039:“const_pointer”:不是“boost::intrusive::detail::default_list_hook”的成员,请参阅“boost::intrusive::detail::default_list_hook”的声明

0 投票
4 回答
22328 浏览

c++ - C++ unique_ptr 和映射

我正在尝试在这样的内部使用C++0x unique_ptrmap

但是 GCC 给了我以下错误(缩短,我认为这是相关部分,请在您自己的 C++ 编译器上测试):

我真的不确定我做错了什么,这适用于 MSVC。我发现了非常相似的问题,看起来很相似,但是他们的解决方案对我不起作用。

0 投票
1 回答
2748 浏览

c++ - 自定义 Unique_ptr 删除器,受控删除

我有一个 for 循环,它遍历 XML 文档并找到指定的属性,指向当前节点的指针位于 boost::interprocess::unique_ptr 内,并且有一个自定义删除器来调用对象的release()函数。似乎在每次循环迭代中指针都会被删除,但是release()当这种情况发生时函数会抛出。

有人可以提出解决方案吗?我想过实施一种机制来检查它是否应该被删除,但我不确定我会怎么做......

代码:

……

对象release()

删除器:

编辑:

0 投票
6 回答
211531 浏览

c++ - 从函数返回 unique_ptr

unique_ptr<T>不允许复制构造,而是支持移动语义。但是,我可以unique_ptr<T>从函数返回 a 并将返回的值分配给变量。

上面的代码按预期编译和工作。那么该行如何1不调用复制构造函数并导致编译器错误呢?如果我不得不使用 line2代替它会有意义(使用 line2也可以,但我们不需要这样做)。

我知道 C++0x 允许这个异常,unique_ptr因为返回值是一个临时对象,一旦函数退出就会被销毁,从而保证返回指针的唯一性。我很好奇这是如何实现的,它在编译器中是特殊情况还是语言规范中是否有其他条款可以利用?

0 投票
2 回答
5890 浏览

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

当我意识到 C++11 添加了unique_ptrs. 我研究了如何在 Google 上使用它们,但未能找到详细信息。我需要知道的是:

  1. unique_ptr除了自动内存收集之外 ,指针和 s 之间究竟有什么不同?
  2. 我将如何unique_ptr从矢量或地图中删除 a ?除了擦除迭代器之外,我还必须使用任何特殊代码吗?
0 投票
5 回答
1351 浏览

c++ - 使用智能指针实现容器

好的,所以每个人都知道应该像瘟疫一样避免使用原始指针并更喜欢智能指针,但是这个建议在实现容器时是否适用?这就是我想要完成的:

Unique_ptr 可以使容器函数编写起来更加麻烦,因为我不能让多个原始指针以一种优雅的方式临时指向同一个对象。例如:

(在这个例子中这没什么大不了的,但我可以想象它怎么会成为一个问题)。我是否应该将这些问题作为强烈暗示容器应该使用良好的 old newdelete和 raw 指针来实现?仅仅为了避免编写析构函数似乎非常麻烦。

0 投票
4 回答
19929 浏览

c++ - 我应该使用 shared_ptr 还是 unique_ptr

我一直在使用 pimpl 成语制作一些对象,但我不确定是否使用std::shared_ptror std::unique_ptr

我知道这样std::unique_ptr效率更高,但这对我来说不是什么大问题,因为这些对象无论如何都比较重,所以std::shared_ptrover的成本std::unique_ptr相对较小。

我目前std::shared_ptr只是因为额外的灵活性而去。例如,使用 astd::shared_ptr允许我将这些对象存储在 hashmap 中以便快速访问,同时仍然能够将这些对象的副本返回给调用者(因为我相信任何迭代器或引用都可能很快变得无效)。

但是,这些对象实际上并没有被复制,因为更改会影响所有副本,所以我想知道也许使用std::shared_ptr和允许副本是某种反模式或坏事。

它是否正确?