我在外部库中有一个预先存在的函数,它看起来像这样;boolCreateTheThing(MyThing*&pOut);简而言之;我给它一个原始指针(通过引用),函数分配内存并将我的指针分配给新分配的对象。当函数返回时,我有责任在我完成后释放内存。显然,我想将此结果存储到unique_ptr中,并避免使用手册delete.我可以创建一个临时原始指针以用于API调用,并将其传递到unique_ptr的构造函数中;MyThing*tempPtr;CreateTheThing(tempPtr);unique_ptrrealPtr=unique_ptr(tempPtr);还有比这更直接的方法吗?
这个问题在这里已经有了答案:HowcanIuseastd::mapwithstd::weak_ptraskey?(2个答案)关闭4年前。我在map中使用弱指针作为键。然而,当我尝试编译时,我得到了丑陋的消息,我将其解释为我缺少std::weak_ptr的比较运算符,这显然是std::map所必需的,因为它根据以下命令对其元素进行排序键值。但是,现在weak_ptr类是一个智能指针类型类,因此可以使用指向某些托管数据的指针。这个类不提供operator在这里,您的见解将不胜感激。感谢期待。
我有一个类,其中有一个范围指针数组,这些指针指向没有默认构造函数的对象。我发现“初始化”它们的唯一方法是像这样使用swap():classBar{Bar(char*message){};}classFoo{boost::scoped_ptrarr[2];Foo(){arr[0].swap(boost::scoped_ptr(newBar("ABC")));arr[1].swap(boost::scoped_ptr(newBar("DEF")));};}这感觉有点冗长和笨拙。我错过了更聪明的方法吗? 最佳答案 arr[0].reset
有人告诉我使用malloc进行分配不再安全,我不是C/C++高手,但我已经使用malloc和C/C++做了一些东西。有谁知道我面临的风险是什么?引用他的话:[..]ButindeedtheweakpointofC/C++itisthesecurity,andtheAchilles'heelisindeedmallocandtheabuseofpointers.C/C++itisawellknowninsecurelanguage.[..]TherewouldbefewappsinwhatIwouldnotrecommendtocontinueprogrammingwithC++."
我还没有看到同时使用unique_ptr和移动语义的pimpl示例。我想向STL派生容器添加一个CHelper类,并使用pimpl隐藏CHelper的功能。这样看起来对吗?派生.hclassCDerived:publicset,publicCHelper{//...};`Helper.h//derivedcontainersneedtosupportbothcopyandmove,soCHelperdoestooclassCHelper{private:classimpl;unique_ptrpimpl;public://---default:needbothcotr&cotr(com
我在启用OpenCL选项的情况下编译了Tesseract3.04.00。在尝试使用GetUTF8Text()从图像中提取文本时,出现malloc错误,我想是内存泄漏。我找到了之前添加的针对内存泄漏错误的补丁,但是,我编译的版本已经添加了补丁。我不确定为什么会发生内存泄漏。这是我得到的输出:[DS]Profilereadfromfile(tesseract_opencl_profile_devices.dat).[DS]Device[1]1:Intel(R)Core(TM)i5-4250UCPU@1.30GHzscoreis14049349632.000000[DS]Device[2]1
Commonwisdomisthatstd::unique_ptrdoesnotintroduceaperformancepenalty(andnotamemorypenaltywhennotusingadeleterparameter),但我最近偶然发现了一个讨论,该讨论表明它实际上引入了一个额外的间接寻址,因为unique_ptr无法在具有ItaniumABI的平台上的寄存器中传递。发布的示例类似于#includeintfoo(std::unique_ptru){return*u;}intboo(int*i){return*i;}Whichgeneratesanadditional
[跟进this问题]最近我一直在处理指向C风格数组的智能指针。我最终完成了推荐的事情并改为使用指向vector的智能指针,但在那段时间里,我得到了一些建议:不要使用shared_ptr对象来管理最初使用make_unique创建的数组因为它不会调用delete[]而是delete.这对我来说似乎不合逻辑,我检查了两个Coliru和标准:这段代码:#include#includeintmain(){std::coutmyUnique(customArrayAllocator(4),customArrayDeleter);std::coutmyShared=std::move(myUniq
这个例子在gcc4.8.3下编译和运行良好:#include#include#includeintmain(){autostr=newconstchar[6]{'h','e','l','l','o','\0'};std::unique_ptr>u_ptr(str,[](constchar*s){delete[]s;});std::cout但是当我尝试使用VisualStudioProfessional2013时,它无法编译(提示函数已删除)。这在VisualStudio2013中还不可能吗?还是我的示例代码有误而gcc忽略了我的错误?错误是:main.cpp(8):errorC2280
传递像getAName(getA().get())这样的函数参数是安全的?getA()返回一个对象unique_ptr.我在VS2010上测试了下面的整个代码,它有效。但我想确定它是否是c++标准,与其他c++编译器一起使用是否安全?#include"stdafx.h"#include#includeusingnamespacestd;classA{public:A(){coutgetA(){returnstd::unique_ptr(newA());;}voidgetAName(A*a){if(a){coutname().c_str()控制台的输出是:A()A~()为了所有编译器的安