草庐IT

unique_pointer

全部标签

c++ - 如何使用带有 std::unique_ptr 成员的自定义删除器?

我有一个包含unique_ptr成员的类。classFoo{private:std::unique_ptrbar;...};Bar是具有create()函数和destroy()函数的第三方类。如果我想在一个独立的函数中使用std::unique_ptr,我可以这样做:voidfoo(){std::unique_ptrbar(create(),[](Bar*b){destroy(b);});...}有没有办法将std::unique_ptr作为类的成员? 最佳答案 假设create和destroy是具有以下签名的自由函数(这似乎是OP

c++ - 工厂 : how to pass temporary smart pointers to functions. C++

我有一个类(class)FooclassFoo;一个工厂返回一个指向它的指针:std::unique_ptrcreateFoo();而且,因为Herb告诉我对Foo的生命周期没有特殊要求的普通函数应该采用普通的裸指针:voidplainf(Foo*f);我的客户应该如何正确地做到这一点?plainF(createFoo());如果他不得不写,他会不高兴的:autosomeName=createFoo();plainF(someName.get()); 最佳答案 您可以使用get成员函数,它返回一个指向所拥有对象的原始指针。plain

c++ - 工厂 : how to pass temporary smart pointers to functions. C++

我有一个类(class)FooclassFoo;一个工厂返回一个指向它的指针:std::unique_ptrcreateFoo();而且,因为Herb告诉我对Foo的生命周期没有特殊要求的普通函数应该采用普通的裸指针:voidplainf(Foo*f);我的客户应该如何正确地做到这一点?plainF(createFoo());如果他不得不写,他会不高兴的:autosomeName=createFoo();plainF(someName.get()); 最佳答案 您可以使用get成员函数,它返回一个指向所拥有对象的原始指针。plain

php - Laravel 迁移 : unique key is too long, 即使指定

我正在尝试在Laravel中迁移用户表。当我运行迁移时,出现此错误:[Illuminate\Database\QueryException]SQLSTATE[42000]:Syntaxerrororaccessviolation:1071Specifiedkeywastoolong;maxkeylengthis767bytes(SQL:altertableusersadduniqueusers_email_uniq(email))我的迁移如下:Schema::create('users',function(Blueprint$table){$table->increments('id'

C++ unique_ptr 和映射

我正在尝试使用C++0xunique_ptrclass在map内像这样://compilewith`g++main.cpp-std=gnu++0x`#include#include#includeusingnamespacestd;structFoo{char*str;Foo(charconst*str_):str(strdup(str_)){}};intmain(void){typedefstd::map>Bar;Barbar;autoa=bar.insert(Bar::value_type(1,newFoo("one")));return0;}但是GCC给了我以下错误(缩短,我认为

C++ unique_ptr 和映射

我正在尝试使用C++0xunique_ptrclass在map内像这样://compilewith`g++main.cpp-std=gnu++0x`#include#include#includeusingnamespacestd;structFoo{char*str;Foo(charconst*str_):str(strdup(str_)){}};intmain(void){typedefstd::map>Bar;Barbar;autoa=bar.insert(Bar::value_type(1,newFoo("one")));return0;}但是GCC给了我以下错误(缩短,我认为

c++ - 我可以使用 if (pointer) 而不是 if (pointer != NULL) 吗?

通过简单地编写if(pointer)来检查指向不是NULL的指针是否安全,或者我必须使用if(pointer!=NULL)? 最佳答案 你可以;空指针被隐式转换为bool值false而非空指针被转换为true。来自C++11标准,bool转换部分:Aprvalueofarithmetic,unscopedenumeration,pointer,orpointertomembertypecanbeconvertedtoaprvalueoftypebool.Azerovalue,nullpointervalue,ornullmember

c++ - std::auto_ptr 到 std::unique_ptr

随着新标准的到来(以及某些编译器中已经提供的部分),新类型std::unique_ptr应该是std::auto_ptr的替代品.它们的用法是否完全重叠(所以我可以对我的代码进行全局查找/替换(不是我会这样做,但如果我这样做了))或者我是否应该知道一些从阅读中不明显的差异文档?另外如果是直接替换,为什么要给它一个新名字而不是仅仅改进std::auto_ptr? 最佳答案 您无法进行全局查找/替换,因为您可以复制auto_ptr(具有已知后果),但只能移动unique_ptr。任何看起来像的东西std::auto_ptrp(newin

c++ - 为什么我不能将 unique_ptr 推回 vector 中?

这个程序有什么问题?#include#includeintmain(){std::vector>vec;intx(1);std::unique_ptrptr2x(&x);vec.push_back(ptr2x);//Thistinycommandhasaviciouserror.return0;}错误:Infileincludedfromc:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0,fromc:\mingw\bin\../lib/gcc/mingw32/4.5.0/i

mongodb find()查询: return only unique values (no duplicates)

这个问题在这里已经有了答案:Getdistinctrecordsvalues(6个回答)关闭7年前。我有一系列文件:{"networkID":"myNetwork1","pointID":"point001","param":"param1"}{"networkID":"myNetwork2","pointID":"point002","param":"param2"}{"networkID":"myNetwork1","pointID":"point003","param":"param3"}...pointID是唯一的,但networkID不是。是否可以以这样的方式查询Mongod