问题标签 [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 回答
977 浏览

c++ - pimpl:避免使用 pimpl 指向指针的指针

在这个问题中,我问了“pimpl:shared_ptr 或 unique_ptr”,我确信 pimpl 习语的正确用法是使用 a unique_ptr,而不是 a shared_ptr。它应该对用户起作用,就好像根本没有指针一样,而很明显,shared_ptr在复制时引入了别名,这绝对像一个指针。

因此,假设用户想要为shared_ptr我的 pimpl 对象创建一个(假设他们是否真的想要多个别名)。例如:

这将导致shared_ptr指向unique_ptr我的实现。

如果我能实现以下目标,那就太好了:

但是以某种方式摆脱了指向指针的指针,同时仍然保持 pimpl 的实现隐藏。

任何想法如何实现这一点(我很高兴更改第 (2) 行和显然my_pimpl,但希望第 (3) 和 (4) 行保持不变)。

0 投票
3 回答
51428 浏览

c++ - std::unique_ptr 用法

似乎在这里 p1 不再是“唯一的”,因为 p2 也引用它

它是合法的 c++ 吗?unique_ptr 有 copy_semantics 吗?如果不是,并且它只有移动语义,那么在将 p1 分配给 p2 之后是否将其设置为 NULL ?

编辑:

好的,所以正确的版本是

据此,在此分配之后, p1 无效?和 auto_ptr 的区别就在这里?明确指定所有权转移比隐含更安全,因为我猜想 auto_ptr 就是这种情况

0 投票
2 回答
2673 浏览

c++ - 返回 NULL 值

framebufferd3d11.h 的片段

framebufferd3d11.cpp 的片段


如果我用 icc 编译,我会遇到 NULL 赋值的问题,因为 NULL 被定义为 0。我该如何解决这样的问题?

0 投票
1 回答
10340 浏览

c++ - 将 unique_ptrs 从一个向量移动到另一个向量

我想将存储在它们的未排序向量中的 unique_ptr 移动到另一个向量,该向量将包含指针的排序向量。

确定移动 unique_ptr 不会自动删除第一个向量中的元素吗?我怎样才能做到这一点?

我想做的例子:

我希望意图是明确的。

更新我的算法不允许就地排序。如果今天有人感觉很好(我不是在问,我的问题见上文),请随时针对这种情况实施它并向我展示。我真的需要“按动作排序”。而且我真的不明白为什么搬家会得多。

0 投票
3 回答
344 浏览

c++11 - function that modifies object pointed to by std::unique_ptr

Somewhere in my code I have a local std::unique_ptr<T>. I need to do stuff with the object pointed at, and I use a function for that:

I call the function like this:

Now I wonder, is there a better way to get the necessary functionality? It just seems two moves are pretty superfluous and potentially dangerous. I do have error handling code I'm not showing here, but that's beside the point.

0 投票
9 回答
53254 浏览

c++ - 是 std::unique_ptr需要知道 T 的完整定义吗?

我在标题中有一些代码,如下所示:

如果我在不包含Thing类型定义的 cpp 中包含此标头,则在 VS2010-SP1 下无法编译:

1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\memory(2067): error C2027: use of undefined type 'Thing'

替换std::unique_ptrstd::shared_ptr并编译。

所以,我猜这是当前 VS2010std::unique_ptr的实现需要完整的定义,它完全依赖于实现。

或者是吗?它的标准要求中是否有一些东西使得std::unique_ptr' 的实现无法仅使用前向声明?感觉很奇怪,因为它应该只保存一个指向 的指针Thing,不是吗?

0 投票
3 回答
2456 浏览

c++ - 从函数返回的 unique_ptr 的范围是什么?

这会正常工作吗?(见示例)

0 投票
2 回答
1446 浏览

c++11 - unique_ptr 自定义存储类型示例?

Howard Hinnant 解释说unique_ptr也可以使用自定义存储类型他以“共享内存”为例。

他只给出粗略的想法(这对于快速介绍来说很好)。但是任何人都可以完成他的“自定义存储类型”示例(无论是否共享内存)?

为了支持放入unique_ptr共享内存,自定义删除器可以包含自定义指针类型(在共享内存应用程序中通常不是真正的指针)。一个简单地放置一个称为指针的嵌套类型,它在您的删除器中模拟指针行为,可公开访问:

我怀疑// ...必须扩展它,并且test()可能会在真正的“自定义存储类型”示例中做一些额外的事情。

谁能告诉我他/她在哪里

  • 其实已经用过这个定制了,
  • 在这种情况下
  • 哪个自定义代码,(//...可能)
  • 以及客户端代码如何使用它?(test()大概)
0 投票
1 回答
166 浏览

c++11 - 初始化列表 (C++0x) 中的闭包删除器和编译器警告

warning C4355: 'this' : used in base member initializer list从 Visual C++ 2010 得到一个:

我有一个持有句柄的类,我想自动关闭句柄,即使该类的 ctor 失败(因此不调用它的 dtor)。但是,我不想费心制作一个完整的句柄包装类,而宁愿将它保存在一个智能指针中。所以我写了这个:

在关闭之前,我用类似的东西初始化 _handle _handle(nullptr, bind(PortDeleter, placeholders::_1, ref(_log))),但这需要一个单独的定义。

我的问题:警告是否与此特定实例有关?无论哪种方式,详细原因是什么?有没有一种简单的方法来避免它?

0 投票
2 回答
671 浏览

c++ - STL 旋转 unique_ptrs 的 const_iterators

我在unique_ptr 中间的const_iterator 上使用std::rotate 时遇到问题。

我试过了:

这导致调用 rotate(...iterator, ...const_iterator &, ...iterator) 没有匹配的函数

因此我尝试了这个: std::vector >::const_iterator first = vec.begin(); std::vector >::const_iterator last = vec.end(); 标准::旋转(第一,中间,最后);

然后它会给出一堆错误消息,如下所示。这是一个错误还是我犯了一些错误?