草庐IT

users_email_unique

全部标签

c++ - 将带有 unique_ptr 的可变 lambda 传递给 const& std::function

我有一个调度函数,它在主线程中执行给定的lambda。为了这个问题,假设它看起来像下面这样:voiddispatch(conststd::function&fn){fn();}我需要在不中断主线程的情况下在新线程中加载新对象。所以我执行以下操作:1)启动一个新线程并在线程内创建一个新的唯一指针,2)调用dispatch并将新的唯一指针传播到它所属的位置。std::unique_ptrfoo;//nullptr//dotheloadinginanewthread:std::threadt([&](){//inthenewthread,loadnewvalue"Blah"andstorei

c++ - 优化编译器能否从 std::unique_ptr 中移除所有运行时成本?

阅读关于std::unique_ptr的http://en.cppreference.com/w/cpp/memory/unique_ptr,我天真的印象是,一个足够聪明的编译器可以用裸指针替换unique_ptr的正确使用,并在unique_ptr时放入一个delete被摧毁。事实真的如此吗?如果是这样,是否有任何主流优化编译器真的这样做了?如果不是,是否可以编写一些具有unique_ptr的部分/全部编译时安全优势的东西,可以优化为没有运行时成本(空间或时间)?注意那些(适本地)担心过早优化的人:这里的答案不会阻止我使用std::unique_ptr,我只是好奇它是一个非常棒的工具

c++ - std::unique_ptr::release() 与 std::move()

我有一个表示运行时上下文并构建树的类,树根保存在unique_ptr中。构建树完成后,我想提取树。这是它的样子(不可运行,这不是调试问题):classContext{private:std::unique_ptrroot{newNode{}};public://imagineaconstructor,attributesandmethodstobuildatreestd::unique_ptrextractTree(){returnstd::move(this->root);}};所以我使用std::move()从Context实例中提取根节点。但是,除了使用std::move()之外

c++ - 是否可以在 Xcode 5.1 中使用 std::make_unique?

由于Xcode5.1包含clang3.4,因此应该可以使用std::make_unique。好像是在memory.h中定义的。但是,它需要有_LIBCPP_STD_VER>11但由于__cplusplus宏的值,它仍然设置为11(仍然是201103L).有办法改变吗? 最佳答案 如clangwebsite中所述,您需要启用-std=c++1y。Xcode在其“C++语言版本”选项中不包含此选项作为选项,因此您需要手动输入它。为此,您需要在项目定义打开时进入“编辑器”菜单,然后按“显示定义”。您现在应该能够手动将“C++语言方言”选项

c++ - "Use of undefined type"带有 unique_ptr 以转发声明的类和默认移动构造函数/赋值

在下面的代码中,是避免编译错误并在A.cpp中手动包含B.h实现移动构造函数/赋值的唯一方法吗?//A.h#includeclassB;//implementationsomewhereinB.h/B.cppclassA{public:A()=default;~A()=default;A(constA&)=delete;A&operator=(constA&)=delete;A(A&&)=default;A&operator=(A&&)=default;private:std::unique_ptrm_b;};VisualStudio2015给出“错误C2027:使用未定义类型”,因为

c++ - std::unique_ptr 删除函数,initializer_list - 驱动分配

全部,当我使用初始化列表格式实例化小部件数组时,指向成员变量小部件实例的裸指针可以编译,但在更改为std::unique_ptr后,gcc会给出有关已删除函数的编译错误。$uname-aLinux..3.5.0-21-generic#32-UbuntuSMP2012年12月11日星期二18:51:59UTCx86_64x86_64x86_64GNU/Linux$g++--versiong++(Ubuntu/Linaro4.7.2-5ubuntu1)4.7.2此代码给出以下编译器错误:#include#includeclassWidget{public:Widget(){}};class

Apache Commons Email在邮件发送中的应用

第1章:简介大家好,我是小黑,今天咱们聊聊ApacheCommonsEmail这个库,它在发送邮件方面可谓是小而美的利器。ApacheCommonsEmail基于JavaMailAPI,但它提供了更简洁、更易用的接口,让咱们在处理电子邮件发送时可以省去不少麻烦。为什么选它呢?首先,它轻量,无需深入研究复杂的JavaMailAPI就能快速上手;其次,它功能全面,不论是发送普通文本邮件、HTML邮件,还是带附件的邮件,它都能轻松应对。第2章:环境搭建好,咱们先说说怎么搭建起ApacheCommonsEmail的环境。首先,得确保你的Java环境搭建好了。ApacheCommonsEmail支持Ja

c++ - 通过取消引用复制 std::unique_ptr 的值

我写了下面的代码,我试图将unique_ptr对象的值复制到一个结构中。#include#includeusingnamespacestd;structS{S(intX=0,intY=0):x(X),y(Y){}//S(constS&){}//S&operator=(constS&){return*this;}intx;inty;std::unique_ptrptr;};intmain(){Ss;s.ptr=std::unique_ptr(newS(1,4));Sp=*s.ptr;//Copythepointer'svaluereturn0;}它在VisualC++2012中弹出错误:

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保持唯一所有权,因此无法复制它。实际上,