问题标签 [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.
c++ - C++0x 性能改进
允许编写更高效的 C++ 代码的 C++0x 改进之一是 unique_ptr 智能指针(太糟糕了,它不允许通过 memmove() 之类的操作移动:该提案未纳入草案)。
即将发布的标准中还有哪些其他性能改进?以下面的代码为例:
该代码将连接向量v中包含的所有字符串。这段简洁的代码的问题在于,accumulate() 复制了周围的东西,并且不使用引用。并且 string() 每次调用 plus 运算符时都会重新分配。因此,与优化良好的类比 C 代码相比,该代码的性能较差。
C++0x 是否提供了解决问题的工具,也许还有其他工具?
c++ - Visual C++ 2010 Beta 1 是否有 unique_ptr,如果没有,我在哪里可以获得 C++0x 参考实现?
我知道:
- 它不在 CTP 中
- 预计将在最终版本中发布
- 我在 Beta 1 中找不到它
- 我想和它一起玩
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&&)
.
现在做什么?
c++ - 在这种情况下,Hinnant 的 unique_ptr 实现是否错误地无法将派生转换为基?
我目前正在尝试使用Howard Hinnant 的 unique_ptr implementation,并且遇到了编译错误。这是一些示例代码:
我得到的错误是
看起来有问题的线路不应该失败。这是实现中的错误,由于缺乏 C++0x 语言特性导致的实现限制,还是对 unique_ptrs 规则的误解?
(注意,我知道这在运行时不起作用,因为我不止一次移动相同的东西;我只是想找出编译时错误。)
c++ - 不推荐使用 auto_ptr 吗?
- auto_ptr 会在传入的 C++ 标准中被弃用吗?
- 是否应该使用 unique_ptr 而不是 shared_ptr 进行所有权转移?
- 如果 unique_ptr 不在标准中,那么我需要改用 shared_ptr 吗?
c++ - 我怎样才能让这个涉及unique_ptr的代码编译?
不编译...(说 unique_ptr 的复制构造函数被删除)
我尝试用前进替换移动。不确定我是否做得对,但它对我不起作用。
c++ - 那么unique_ptr可以在stl集合中安全使用吗?
我对 unique_ptr 和右值移动哲学感到困惑。
假设我们有两个集合:
现在我预计以下操作会失败,因为不知道算法在内部做什么,并且可能会制作内部数据透视副本等,从而从 auto_ptr 中剥夺所有权:
我明白了。并且编译器正确地不允许这种情况发生。
但后来我这样做:
这可以编译。我不明白为什么。我不认为 unique_ptrs 可以被复制。这是否意味着不能采用枢轴值,因此排序效率较低?或者这个支点实际上是一个举动,实际上与 auto_ptrs 的集合一样危险,应该被编译器禁止?
我想我错过了一些重要的信息,所以我急切地等待有人向我提供啊哈!片刻。
c++ - unique_ptr 提升等效?
在 boost 库中是否有 C++1x 的 std::unique_ptr 的等效类?我正在寻找的行为是能够具有异常安全的工厂功能,就像这样......
编辑:现在,我正在使用这个黑客,这似乎是我目前能得到的最好的......
c++ - 使用 tcp::acceptor::async_accept 的套接字指针所有权转移
我最近开始在一个项目中使用 Boost.Asio,想知道是否有人知道将新创建的套接字的所有权转移到 tcp::acceptor::async_accept 的干净解决方案,这反过来又会将此所有权转移到接受处理函数。
请注意,这不是一个不连贯的愿望,因为处理程序只被调用一次。
我注意到我不能将 std::bind() 和 std::unique_ptr<> 作为参数,因为 std::bind() 要求它的参数是 CopyConstructible 的,这是理所当然的。不仅如此,Boost 的 AcceptHandler 概念也要求是 CopyConstructible。
所以我的选择是:
- 使用已弃用的 std::auto_ptr<> 方式使用复制构造函数移动对象,这可能会在 Boost.Asio 的新版本中导致晦涩的错误。
- 使用 std::shared_ptr<> 并且一旦不再需要指针,即当它到达实际的处理函数时,就无法从指针中删除共享所有权(这是在http://www的示例中完成工作的方式.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html据我所知)。
或者
- 你对我有更好的主意。
我在这里几乎不知所措。任何人都可以启发我吗?
c++ - std::list< std::unique_ptr>:传递它
假设我有一个std::list
ofclass T
的:
将它传递给函数时,我会使用一个引用:
std::list
传递 s 的(元素)的最佳方式是unique_ptr
什么?
像这样:
或这个:
或这个:
例如,我将如何使用std::list
'back()
函数调用它?恕我直言,这些都是“某种”等价的,但我确定我在这里遗漏了一些东西。
谢谢