草庐IT

SOME_UNIQUE_VALE

全部标签

c++ - 传递返回多态 unique_ptr 的 lambda 作为函数指针

我想传递一个非捕获的lambda,它返回一个std::unique_ptr,作为std::unique_ptr(*)()类型的函数指针.但是,这仅在我将lambda的返回类型明确声明为std::unique_ptr时才有效。.为什么要明确说明返回类型?为什么它适用于std::function没有这个额外的返回类型?#include#includestructBase{virtual~Base()=default;};structDerived:Base{};structFailsForF2{usingFunction=std::add_pointer_t()>;FailsForF2(F

c++ - 在带有 std::unique_ptr 的 lambda 中使用 std::bind

//Byconstl-valuereferenceautofunc2=std::bind([](conststd::unique_ptr>&pw)//fine{std::coutsize()>(22,1));//Bynon-constl-valuereferenceautofunc3=std::bind([](std::unique_ptr>&pw)//fine{std::coutsize()>(22,1));//ByValueautofunc4=std::bind([](std::unique_ptr>pw)//error{std::coutsize()>(22,1));func4(

c++ - 如何为 std::unique_ptr 创建一个有效的 C++ 别名模板

我想为std::unique_ptr创建一个别名模板来提供我自己的删除函数。unique_ptr有一个标量和一个数组实现,它们是这样定义的:template>classunique_ptr//scalartemplateclassunique_ptr//array我在尝试覆盖unique_ptr的标量和数组版本时遇到了麻烦。只为一个版本创建别名很容易,如下所示:templatestructDeleter{voidoperator()(T*ptr){deleteptr;}};templateusingmy_unique_ptr=std::unique_ptr>;但是当我尝试添加第二个别名

c++ - 多态 unique_ptr 复制省略

我有以下代码适用于Clang5.0,但不适用于启用了C++14的Clang3.8:classBase{};classDerived:publicBase{};std::unique_ptrMakeDerived(){autoderived=std::make_unique();returnderived;}intmain(){autobase=MakeDerived();std::coutLiveSampleHere在这种情况下,由于复制省略,返回值在技术上是移动构建的吗?如果是这样,这是否意味着unique_ptr的移动构造函数旨在支持用户类类型的隐式向上转换?从cppreferen

c++ - 为什么 Google Test/Mock 通过 std::unique_ptr 显示泄露的模拟对象错误?

假设有一个Bar对象,它使用了一个Foo对象。所有权是独占的,因此Bar在其构造函数中将Foo作为std::unique_ptr获取。我想用Google测试框架测试Bar,所以我编写了以下代码:usingnamespacetesting;classFoo{public:virtualintF()=0;};classBar{public:Bar(std::unique_ptr&&foo):m_foo(std::move(foo)){}intB(){returnm_foo->F();}private:std::unique_ptrm_foo;};classMockFoo:publicFoo

c++ - 在这种情况下 unique_ptr 的行为应该是什么?

假设我有以下内容:std::unique_ptrpA;pA(newA);在这个复杂的例子中,pA(newA);的行为应该是怎样的?是吗?据我所知,在MSVC2010中,voidoperator()(T*)const;在new之后立即调用fromdefault_delete立即返回并删除指针。而g++(4.7.0)给了我nomatchforcall(std::unique_ptr)(A*)错误。 最佳答案 代码不应编译。std::unique_ptr不会重载operator()。VisualC++2011DeveloperPrevie

c++ - std::unique_ptr<T> 不完整类型错误

我有templateclassqueue{private:structnode{Tdata;std::unique_ptrnext;//compileerroronincompletetypenode(T&&data_):data(std::move(data_)){}};std::unique_ptrhead;node*tail;public:queue():tail(nullptr){}我在VS10的标记行上遇到编译错误。在这种情况下,我是否应该被允许使用不完整的类型(实例化模板-构造函数-这里以int为例)?有解决方法吗?编辑singlethreadedqueue.h(62):e

c++ - 具有多态类型的 unique_ptr 未被删除

我有一个使用基类派生类型存储的unique_ptrvectorstd::unique_ptr>>decisionVariables;其中Variable是父类(superclass),派生类型是Route类。我的问题是,当包含decisionVariables的类被删除时,路由实例似乎没有被删除。路由来源于变量:#ifndef__VARIABLE__#define__VARIABLE__/***Interfacefordecisionvariables.*/#include#include#includeclassVariable{public:/***Returnsanindepen

c++ - 试图仅在 C++ 中模拟 Matlab "unique"函数

我有以下vector,v=[9295]及其唯一元素c=[259]按升序排列。我想提取vectoru=[3132]。uvector包含vectorc中唯一元素的索引,从而重构vectorv。我的想法是遍历v并借助基于c的唯一值构建的哈希表来获取索引值。这有意义吗?如果是的话,你能请一些人在c++中提出一种方法吗?高度赞赏其他建议(我对有效的实现感兴趣,因为v和c矩阵足够大)。最好的问候,托特 最佳答案 C++的索引是从0开始的,这样写比较正确u={2,0,2,1};您可以使用标准算法来完成任务。例如(这里我假设vectorc已经以某种

c++ - 制作一个 const unique_ptr 然后尝试从它 std::move 给出相同的错误,就好像您试图访问复制构造函数一样

当我们尝试复制unique_ptr(例如,将一个唯一指针分配给另一个)时,我注意到错误是ErrorC2280std::unique_ptr#includeintmain(){std::unique_ptra=std::make_unique(2);std::unique_ptrb=a;}没关系,因为unique_ptr没有定义复制构造函数。您不会从唯一指针进行复制以在它们之间move(转移指针的所有权)。有趣的是(好吧,也许不是),这段代码抛出了同样的错误。现在我知道它是无效的(我将第一个unique_ptr声明为不可变对象(immutable对象)),但错误消息暗示它正在尝试调用复制