草庐IT

together_unique

全部标签

c++ - 如果 A 有析构函数,什么时候 std::unique_ptr<A> 需要一个特殊的删除器?

如果类A在unique_ptr它是自己的析构函数,是否有必要声明一个删除器以确保唯一指针使用该析构函数?我想到的例子是A有成员(member)mx类型user_matrix(我刚起的名字)需要调用一个函数free(...)要释放它的内存,可以定义~A(){user_matrix::free(mx);/*etc*/}自default_deleter会调用delete,据我了解应该使用~A().但是,Josuttis(C++标准库:教程和引用)一书的“相关资源的删除器”部分5.2节中打开和关闭目录的示例表明可能需要声明一个特殊的删除器来执行这个,所以我很困惑....这是因为在给定的示例中,

c++ - 复制构造函数以转移 unique_ptr 的所有权

我需要编写一个复制构造函数,它还转移被复制对象的unique_ptr成员的所有权。情况如下:classC{//Cclassstuff};classA{public:publicA();publicA(constA&a);private:std::unique_ptrc_;}classB{public:B(constA&b):a_(a){}private:Aa_;};我应该如何为A实现复制构造函数? 最佳答案 我猜你的意图或方法是错误的。复制构造函数旨在创建参数的拷贝,但由于unique_ptr保持唯一所有权,因此无法复制它。实际上,

c++ - 来自 std :unique_ptr to bool 的隐式转换错误

我正在使用Allegro创建一个简单的游戏。当我尝试验证指向显示器的指针不为空时,我收到编译器错误提示errorC2664:'voidvalidate(bool,std::string)':cannotconvertargument1from'std::unique_ptr>'to'bool'这是我的代码#include#include#include#includeusingnamespacestd;constintWIDTH=512;constintHEIGHT=512;voidvalidate(boolptr,stringerrorMessage){if(!ptr){cerrdi

c++ - 从优先级队列中获取 unique_ptr

我在priority_queue中维护一组unique_ptr实例。在某些时候,我想获取第一个元素并将其从队列中删除。但是,这总是会产生编译器错误。请参阅下面的示例代码。intmain(){std::priority_queue>queue;queue.push(std::unique_ptr(newint(42)));std::unique_ptrmyInt=std::move(queue.top());return1;}这会产生以下编译器错误(gcc4.8.0):uptrtest.cpp:Infunction‘intmain()’:uptrtest.cpp:6:53:error:u

c++ - 使用什么 std::optional 或 std::unique_ptr

我有一个包含动态分配成员的类(仅在使用时才分配)。这样想:classA{};classB{A*aMember;};用什么替换A*会更好:std::optional或std::unique_ptr?以及何时使用std::optional而不是std::unique_ptr 最佳答案 std::optional保证不会发生辅助内存分配。这意味着A类型的潜在对象的原始缓冲区嵌入到std::optional.它是std::optional的组成部分的内存占用。这意味着std::optional的内存大小总是至少为sizeof(A),无论是否

c++ - GCC 4.4/4.5 unique_ptr 不适用于 unordered_set/unordered_map

有什么地方可以确认吗?我不确定是GCC的问题还是我的代码的问题。例如,以下代码无法编译:#include#includeusingnamespacestd;intmain(){unordered_set>s;unique_ptrp(newint(0));s.insert(move(p));return0;}错误信息太大,我不想放在这里。GCC版本为4.5.3,编译标志为-std=gnu++0x。也在4.4.5上测试过。 最佳答案 GCC4.6.1按原样接受您的代码,我认为它没有任何问题(即关联容器的value_type必须是Empl

c++ - 这个 unique_ptr 的初始化有什么问题?

有人能告诉我,unique_ptr的以下初始化有什么问题吗?intmain(){unique_ptrpy(nullptr);py=newint;....}g++-O2xxx.cc-lm-oxxx-std=c++11说:error:nomatchfor‘operator=’(operandtypesare‘std::unique_ptr’and‘int*’)py=newint;^做unique_ptrpx(newint);工作得很好。 最佳答案 两段代码的初始化都很好,unique_ptr有constructors对于nullptr和

c++ - 为什么我不能 std::move std::unique_ptrs between std::sets?

我真的很想将一些unique_ptr从一个std::setmove到另一个:#include#include#includeintmain(){std::set>a;std::set>b;a.insert({0,std::unique_ptr(newint(42))});std::move(a.begin(),a.end(),std::inserter(b,b.end()));}但是,我在CentOS7上的GCC4.8.5显然不满意:[root@localhost~]#g++test.cpp-std=c++11-otestInfileincludedfrom/usr/include/c

c++ - 最快的 C++ 容器 : Unique Values

我正在编写一个与MySQL数据库交互的电子邮件应用程序。我有两个表来获取我的数据,其中一个包含取消订阅,另一个是标准用户表。截至目前,我正在创建一个指向电子邮件对象的指针vector,并将所有未订阅的电子邮件存储在其中,最初是这样。然后我有一个标准的SQL循环,我在其中检查电子邮件是否不在取消订阅vector中,然后将其添加到全局发送电子邮件vector中。我的问题是,是否有更有效的方法来做到这一点?我必须为系统中的每一封电子邮件搜索unsubvector,最多5万封不同的邮件。是否有更好的搜索结构?并且,一个更好的结构来维护一个独特的值(value)集合?如果它已经包含它,也许会简单

c++ - 什么时候将 unique_ptr 与 STL 容器一起使用才有意义? (C++11)

unique_ptr的容器似乎没有什么意义:你不能将它与初始化列表一起使用,而且我无法遍历容器(下面的解决方法)。我误会了什么吗?或者什么时候使用unique_ptr有意义和STL容器?#include#includeusingnamespacestd;structBase{voidgo(){}virtual~Base(){}};//virtual~Base()=default;gives//"declaredvirtualcannotbedefaultedintheclassbody"why?classDerived:publicBase{};intmain(){//vector>v