问题标签 [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 投票
4 回答
2054 浏览

c++ - C++0x 性能改进

允许编写更高效的 C++ 代码的 C++0x 改进之一是 unique_ptr 智能指针(太糟糕了,它不允许通过 memmove() 之类的操作移动:该提案未纳入草案)。

即将发布的标准中还有哪些其他性能改进?以下面的代码为例:

该代码将连接向量v中包含的所有字符串。这段简洁的代码的问题在于,accumulate() 复制了周围的东西,并且不使用引用。并且 string() 每次调用 plus 运算符时都会重新分配。因此,与优化良好的类比 C 代码相比,该代码的性能较差。

C++0x 是否提供了解决问题的工具,也许还有其他工具?

0 投票
1 回答
431 浏览

c++ - Visual C++ 2010 Beta 1 是否有 unique_ptr,如果没有,我在哪里可以获得 C++0x 参考实现?

我知道:

  • 它不在 CTP 中
  • 预计将在最终版本中发布
  • 我在 Beta 1 中找不到它
  • 我想和它一起玩
0 投票
2 回答
1756 浏览

c++ - 无法创建 MoveConstructibles 的地图

我有一个包含 a 的类std::unique_ptr<>,我想把这个类的实例放在一个std::map<>. 我认为促使将移动语义引入 C++ 的原因之一是将诸如此类的东西unique_ptrs放入标准容器中的可能性(在向量的情况下确实有效)。但在我看来,std::map<>不喜欢这个想法。为什么会这样?

谢谢。

- 编辑

为了更清楚,确切的错误消息是:

看起来这是一个问题std::pair<>,但单独使用时效果很好:

虽然这显然并不意味着它不能被滥用:

这可能是std::map<>.

线索?

- 编辑

查看错误消息,确实恰好是 TDM-GCC 4.4.1 的std::map<>实现存在问题。它似乎没有像std::vector<>::push_back(value_type&&).

现在做什么?

0 投票
2 回答
1680 浏览

c++ - 在这种情况下,Hinnant 的 unique_ptr 实现是否错误地无法将派生转换为基?

我目前正在尝试使用Howard Hinnant 的 unique_ptr implementation,并且遇到了编译错误。这是一些示例代码:

我得到的错误是

看起来有问题的线路不应该失败。这是实现中的错误,由于缺乏 C++0x 语言特性导致的实现限制,还是对 unique_ptrs 规则的误解?

(注意,我知道这在运行时不起作用,因为我不止一次移动相同的东西;我只是想找出编译时错误。)

0 投票
4 回答
45022 浏览

c++ - 不推荐使用 auto_ptr 吗?

  1. auto_ptr 会在传入的 C++ 标准中被弃用吗?
  2. 是否应该使用 unique_ptr 而不是 shared_ptr 进行所有权转移?
  3. 如果 unique_ptr 不在标准中,那么我需要改用 shared_ptr 吗?
0 投票
1 回答
3668 浏览

c++ - 我怎样才能让这个涉及unique_ptr的代码编译?

不编译...(说 unique_ptr 的复制构造函数被删除)

我尝试用前进替换移动。不确定我是否做得对,但它对我不起作用。


0 投票
3 回答
23000 浏览

c++ - 那么unique_ptr可以在stl集合中安全使用吗?

我对 unique_ptr 和右值移动哲学感到困惑。

假设我们有两个集合:

现在我预计以下操作会失败,因为不知道算法在内部做什么,并且可能会制作内部数据透视副本等,从而从 auto_ptr 中剥夺所有权:

我明白了。并且编译器正确地不允许这种情况发生。

但后来我这样做:

这可以编译。我不明白为什么。我不认为 unique_ptrs 可以被复制。这是否意味着不能采用枢轴值,因此排序效率较低?或者这个支点实际上是一个举动,实际上与 auto_ptrs 的集合一样危险,应该被编译器禁止?

我想我错过了一些重要的信息,所以我急切地等待有人向我提供啊哈!片刻。

0 投票
5 回答
40256 浏览

c++ - unique_ptr 提升等效?

在 boost 库中是否有 C++1x 的 std::unique_ptr 的等效类?我正在寻找的行为是能够具有异常安全的工厂功能,就像这样......

编辑:现在,我正在使用这个黑客,这似乎是我目前能得到的最好的......

0 投票
1 回答
1251 浏览

c++ - 使用 tcp::acceptor::async_accept 的套接字指针所有权转移

我最近开始在一个项目中使用 Boost.Asio,想知道是否有人知道将新创建的套接字的所有权转移到 tcp::acceptor::async_accept 的干净解决方案,这反过来又会将此所有权转移到接受处理函数。

请注意,这不是一个不连贯的愿望,因为处理程序只被调用一次。

我注意到我不能将 std::bind() 和 std::unique_ptr<> 作为参数,因为 std::bind() 要求它的参数是 CopyConstructible 的,这是理所当然的。不仅如此,Boost 的 AcceptHandler 概念也要求是 CopyConstructible。

所以我的选择是:

或者

  • 你对我有更好的主意。

我在这里几乎不知所措。任何人都可以启发我吗?

0 投票
3 回答
11125 浏览

c++ - std::list< std::unique_ptr>:传递它

假设我有一个std::listofclass T的:

将它传递给函数时,我会使用一个引用:

std::list传递 s 的(元素)的最佳方式是unique_ptr什么?

像这样:

或这个:

或这个:

例如,我将如何使用std::list'back()函数调用它?恕我直言,这些都是“某种”等价的,但我确定我在这里遗漏了一些东西。

谢谢