草庐IT

c++ - 如何防止客户端将 nullptr 传递给构造函数?

对于需要std::unique_ptr的构造函数,如何防止客户端有效地传递nullptr?classFoo{Foo(std::unique_ptrbar):myBar(std::move(bar)){}}我可以用nullptr_t参数重载构造函数,然后将其设置为已删除以在编译时检测一些nullptr吗?Foo(nullptr_t)=delete;当我已经将它移动到初始化列表中时,我可以安全地检查构造函数主体中的nullptr吗?(有些东西告诉我我不能)Foo(std::unique_ptr):myBar(std::move(bar)){if(!bar)throwinvalid_argu

C++ 如何使 template<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr

我需要完成以下任务:templatef(){:return{-1ifTisofintegraltype,elsenullptr}}在我的特定用例中,T可以是四种类型之一:intPy_ssize_t//ssize_tPy_hash_t//ssize_tPyObject*//PyObjectissomeCstruct这是我迄今为止最好的解决方案:templateTtest(typenameenable_if::value,void*>::type=nullptr){return-1;}templateTtest(typenameenable_if::value,void*>::type=n

c++ - 返回 nullptr 迭代器,如何转换它们

我在解决程序中的问题时遇到了一些问题。所以目前每个block都会返回一个迭代器,但是迭代器取决于两种情况:在block中找到所需的元素:returnresultIter;在block中未找到所需的元素:'returnnullptr`第一种情况很简单也很容易解决,但第二种情况是我遇到麻烦的地方。给定模板参数InIter,如何将nullptr转换为InIter类别?templateInInterfunc(...){InIterres=//returnsitertofoundelementiffoundloop(...)//ifsoatokenwillchangedtosignifyacan

c++ - 删除指针和将其设置为 nullptr 之间有什么区别?

这个问题在这里已经有了答案:deletevsNULLvsfreeinc++(6个答案)关闭7年前。deletepointer和pointer=nullptr是一样的吗?可能不是,但后者会释放内存吗?deletepointer怎么样?pointer=nullptr/pointer=nullptr;删除指针?为什么不使用它来提供一种安全的方法来在需要时过早删除指针,因为它们通常会在其他时间被删除并导致正常删除出错?

c++ - CDT代码分析器如何引入nullptr?

我在EclipseCDT中遇到令人困扰的代码分析器错误。它不适用于C++11功能。__GXX_EXPERIMENTAL_CXX0X__已定义并设置了编译器标志。库编译并工作正常,但我找不到告诉Eclipsenullptr是关键字的方法!请不要突出显示它。我使用的是当前LTSUbuntu(12.04)的默认版本。它是Indigo(3.7.2)。 最佳答案 Windows->首选项->C/C++->设置->CDTGCC内置编译器设置您可以在那里指定标准:gcc-std=c++11${FLAGS}-E-P-v-dD"${INPUTS}"它

c++ - unique_ptr、nullptr 并支持 gcc 4.5.x 和 4.6.x

我正在开发一个有两个不同最终用户的库,其中一个使用gcc4.5.3,另一个刚刚迁移到gcc4.6.3。该库使用新的C++11智能指针(特别是unique_ptr)并在gcc4.5.3上编译良好。然而,在这两个版本之间,gcc开始支持nullptr,因此unique_ptr的API发生了变化,以更接近标准。现在这样做,下面的代码从好到模棱两可unique_ptrup(newint(30));...if(up==0)//ambiguouscallnowtounique_ptr(int)for0是否有一种干净的(即,下一句)方法来更改上面的if语句,以便它在有和没有nullptr的情况下都有

c++ - c++中带有智能指针的循环双链表

是否可以在C++中使用智能指针创建循环双向链表structNode{intval;shared_ptrnext;weak_ptrprev;};shared_ptrhead;但这将有共享指针的循环引用,因此无法正确释放。 最佳答案 使循环链表本身成为一个类(使用构建它所需的任何操作,如追加)。通过设置tail->next=nullptr让它的析构函数断开链接。断开哪个链接应该无关紧要,因此如果您不使用头部和尾部,只需将它们中的任何一个设置为nullptr,就可以了。在我的测试中,我做了一个循环链表,节点没有析构。然后在最后,我在它退出

c++ - 如何正确使用硬件加速的 Media Foundation Source Reader 来解码视频?

我正在使用MediaFoundation的SourceReader编写硬件加速的h264解码器,但遇到了一个问题。我关注了thistutorial并使用WindowsSDKMediaFoundation示例支持我自己。当硬件加速关闭时,我的应用似乎可以正常运行,但它无法提供我需要的性能。当我通过将IMFDXGIDeviceManager传递给用于创建读取器的IMFAttributes来打开加速时,事情变得复杂了。如果我使用D3D_DRIVER_TYPE_NULL驱动程序创建ID3D11Device,应用程序运行良好并且帧处理速度比在软件模式下更快,但由CPU和GPU判断使用它仍然在CP

c++ - 为什么 MS 在其 win32api 中没有返回字体文件名的函数,给定字体句柄?

在使用WindowsAPI多年的经验中,这是我第一次遇到我需要做某事的情况,而我不能使用Windows当前的编程接口(interface)。根据我的研究,字体“ArialBlack”使用文件arialblk.ttf并且字体“ArialBlackItalic”没有文件,字体“ArialBlack”也没有粗体”,至少在我装有Windows7的计算机中是这样。我在下面插入了一个程序来显示几行使用字体“ArialBlack”的文本,单独使用,然后使用斜体和粗体显示。令我惊讶的是,斜体文本呈现正常,而粗体文本呈现为好像只是“ArialBlack”。然后我意识到同样的事情发生在MSWord上。我还

c++ - 给 nullptr 一个类型来进行模板推导

假设以下片段:templatevoidfct(T*a,T*b){//dosomething}Aa;fct(&a,nullptr);//Problemhere!这很麻烦,因为调用参数的类型是A*和nullptr_t所以编译器无法推断模板参数T.一般来说,我可以想出几种解决方法:定义A*b=nullptr并使用fct(&a,b)为fct定义一个带有一个参数的重载对于nullptr案例使用fct(&a,static_cast(nullptr))或者是否有更简洁的解决方案,例如创建“typednullptr”之类的东西? 最佳答案 只需将第