草庐IT

unique_with_zero

全部标签

c++ - unique_ptr 实现中可能存在的错误

这个问题在这里已经有了答案:Unique_ptrandforwarddeclaration(2个答案)关闭6年前。我试图将unique_ptr类成员与前向声明一起使用。正如许多消息来源所说,例如Forwarddeclarationwithunique_ptr?声明非内联析构函数应该就足够了,但在VS2013和GCC5.3.1中似乎并非如此。我没有测试其他编译器。例子:#includeclassB;classA{public://A();~A();private:std::unique_ptrb;};//classB{};intmain(){Aa;}我只能在取消注释ctor声明或类B声明

c++ - 在什么情况下 std::unique_ptr::operator[] 可能抛出?

我的类有一个operator[],它所做的就是在unique_ptr上调用std::unique_ptr::operator[]>成员(member)。相关部分就是这样:templatestructFoo{T&operator[](constsize_tpos)constnoexcept{returndata_[pos];}std::unique_ptrdata_;};我已将运算符标记为noexcept。但是,unique_ptr::operator[]不是noexcept。我无法找出原因,也不知道我是否可以假设它永远不会抛出。unique_ptr::operator[]本身没有在文档

c++ - enable_if : minimal example for void member function with no arguments

我试图更好地理解C++11中的std::enable_if并且一直在尝试编写一个最小的示例:一个类A带有成员函数voidfoo()根据类模板中的类型T具有不同的实现。下面的代码给出了期望的结果,但我还没有完全理解它。为什么版本V2有效,但V1无效?为什么需要“冗余”类型U?#include#includetemplateclassA{public:A(Tx):a_(x){}//EnablethisfunctionifT==int/*V1*///template::value,int>::type=0>/*V2*/template::value,int>::type=0>voidfoo(

c++ - 等待条件的非线程替代方法。 (编辑 : Proactor pattern with boost. asio?)

我正在实现一个消息传递算法。当相邻节点在节点上有足够的信息来组成消息时,消息就会在相邻节点之间传递——从相邻节点传递到该节点的信息。如果我让每条消息成为一个线程并使用boost::condition使线程休眠直到所需信息可用,那么实现就很简单了。不幸的是-我在图表中有100k个节点,这意味着300k个线程。当我asked如何制作那么多线程答案是我不应该-而是重新设计。我的问题是:是否有用于等待条件的标准设计模式?也许是某种异步控制模式?编辑:我想我可以用proacator模式做到这一点。我已经编辑了标签以包含boost::asio-看看是否有人对此有建议。所以讨论可以是具体的,这里是到

c++ - 具有 std::unique_ptr 的容器的访问器函数

我将要设计一个API,其中存在两个类:数据/计算类和此类的容器。然而,容器不仅仅是一个哑容器,它还携带有关整个集合的信息,这超出了可以用迭代器实现的常见内容。所以,容器基本上包装了一个std::vector,添加一些预先计算的属性,实用函数等。容器类的API还应该包含的是添加data/calc类实例的方法,访问方法。我不只是想打开std::vector对公众来说,因为向容器中添加新的data/calc类会导致重新计算集合类的许多属性。但是,我想提供与STL容器访问器方法相同的访问器方法at()和operator[].最初,我添加了一个std::vector>类型的私有(private)

c++ - 每个显示器 DPI 感知 : black window glitch with NVIDIA Optimus

我想制作一个Per-MonitorDPI-AwareDirect2D应用程序。我已经扩展了Microsoft的"FirstDirect2DProgram"处理WM_DPICHANGED的示例,如KennyKerr'sMSDNarticle中所述.这在两个显示器都使用一个视频卡时有效,但在使用我的笔记本电脑的NVIDIAOptimus设置时出现故障。我可以通过运行Per-MonitorAwareWPFSample重现相同的故障通过以下步骤:每台显示器上的不同DPI比例因子。启用Optimus(集成显卡上的笔记本电脑显示屏,Quadro卡上的外接显示器)应用程序在主显示器上启动-右侧的外部

c++ - 如何一次将多个 unique_ptr 插入 vector

我有一个vector:std::vector>并想插入几个新的unique_ptr在指定位置放入其中。有成员函数std::vector::insert(iteratorposition,size_typen,constvalue_type&val)但唉,复制的限制unique_ptr的不允许使用此重载。我已阅读thisquestion,然而这是为了插入unique_ptr已经存在于另一个vector中。我想创建新的。我意识到我可以用一个循环来做到这一点,例如将3个新项目插入vector的开头:for(intn=0;n!=3;++n)vec.insert(vec.begin(),std:

c++ - LLVM IR : Identifying Variables with Metadata Nodes

目前我正在开发一种工具,该工具可以识别对任意程序的全局变量和字段变量的加载和存储访问。此外,访问的变量应该由它们的源级别名称/标识符来标识。为了完成这个,我将被诊断程序的源代码编译成带有调试信息的LLVMIR。到目前为止一切顺利,生成的元数据节点包含所需的源级别标识符。但是,我无法将某些LLVMIR标识符和元数据中的信息联系起来。例如,考虑一个类的静态成员:classTestClass{public:staticintNumber;};相应的LLVMIR如下所示:@_ZN12TestClass6NumberE=externalglobali32,align4...!15=!DIDeri

c++ - 返回对 std::unique_ptr 的引用的原因

我想知道在C++中是否有合理的理由通过引用返回唯一指针,即std::unique_ptr&?我以前从未真正见过这种技巧,但我的新项目似乎经常使用这种模式。乍一看,它只是有效地打破/规避了“唯一所有权”契约,使得无法在编译时捕获错误。考虑以下示例:classTmContainer{public:TmContainer(){//Createsomesortofcomplexobjectonheapandstoreunique_ptrtoitm_time=std::unique_ptr(newtm());//Storesomethingmeaningfulinitsfieldsm_time-

c++ - is_assignable 和 std::unique_ptr

Here是来自gcc的测试文件,livedemostructdo_nothing{templatevoidoperator()(T*){}};intmain(){inti=0;std::unique_ptrp1(&i);std::unique_ptrp2;static_assert(!std::is_assignable::value,"");//note!here.}std::is_assignableIftheexpressionstd::declval()=std::declval()iswell-formedinunevaluatedcontext,providesthemem