问题标签 [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++ - 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) 行保持不变)。
c++ - std::unique_ptr 用法
似乎在这里 p1 不再是“唯一的”,因为 p2 也引用它
它是合法的 c++ 吗?unique_ptr 有 copy_semantics 吗?如果不是,并且它只有移动语义,那么在将 p1 分配给 p2 之后是否将其设置为 NULL ?
编辑:
好的,所以正确的版本是
据此,在此分配之后, p1 无效?和 auto_ptr 的区别就在这里?明确指定所有权转移比隐含更安全,因为我猜想 auto_ptr 就是这种情况
c++ - 返回 NULL 值
framebufferd3d11.h 的片段
framebufferd3d11.cpp 的片段
如果我用 icc 编译,我会遇到 NULL 赋值的问题,因为 NULL 被定义为 0。我该如何解决这样的问题?
c++ - 将 unique_ptrs 从一个向量移动到另一个向量
我想将存储在它们的未排序向量中的 unique_ptr 移动到另一个向量,该向量将包含指针的排序向量。
确定移动 unique_ptr 不会自动删除第一个向量中的元素吗?我怎样才能做到这一点?
我想做的例子:
我希望意图是明确的。
更新:我的算法不允许就地排序。如果今天有人感觉很好(我不是在问,我的问题见上文),请随时针对这种情况实施它并向我展示。我真的需要“按动作排序”。而且我真的不明白为什么搬家会贵得多。
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.
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_ptr
为std::shared_ptr
并编译。
所以,我猜这是当前 VS2010std::unique_ptr
的实现需要完整的定义,它完全依赖于实现。
或者是吗?它的标准要求中是否有一些东西使得std::unique_ptr
' 的实现无法仅使用前向声明?感觉很奇怪,因为它应该只保存一个指向 的指针Thing
,不是吗?
c++ - 从函数返回的 unique_ptr 的范围是什么?
这会正常工作吗?(见示例)
c++11 - unique_ptr 自定义存储类型示例?
Howard Hinnant 解释说,unique_ptr
也可以使用自定义存储类型。他以“共享内存”为例。
他只给出粗略的想法(这对于快速介绍来说很好)。但是任何人都可以完成他的“自定义存储类型”示例(无论是否共享内存)?
为了支持放入
unique_ptr
共享内存,自定义删除器可以包含自定义指针类型(在共享内存应用程序中通常不是真正的指针)。一个简单地放置一个称为指针的嵌套类型,它在您的删除器中模拟指针行为,可公开访问:
我怀疑// ...
必须扩展它,并且test()
可能会在真正的“自定义存储类型”示例中做一些额外的事情。
谁能告诉我他/她在哪里
- 其实已经用过这个定制了,
- 在这种情况下,
- 哪个自定义代码,(
//...
可能) - 以及客户端代码如何使用它?(
test()
大概)
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)))
,但这需要一个单独的定义。
我的问题:警告是否与此特定实例有关?无论哪种方式,详细原因是什么?有没有一种简单的方法来避免它?
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(); 标准::旋转(第一,中间,最后);
然后它会给出一堆错误消息,如下所示。这是一个错误还是我犯了一些错误?