草庐IT

base_ptr

全部标签

c++ - 使用 shared_ptr 时奇怪的双析构函数调用

最后我找到了一个非常奇怪的错误,这是由两次调用析构函数引起的。这是重现错误的最少代码:#include#include#includeclasscEventSystem{public:cEventSystem(){std::cout(eventSystem);}voidonEvent(){}std::shared_ptrtileBrowser;};intmain(){cEventSystemeventSystem;cGuigui(eventSystem);}输出是:constructor:0x7fffffffe67fdestructor:0x7fffffffe2dfdestructor

c++ - 在赋值运算符中分配 std::shared_ptr

我正在创建自己的自定义Filter类以用于boost::filtered_graph。WeightMap概念必须具有默认构造函数、复制构造函数和赋值运算符。我创建了下面的类,它有一个std::shared_ptr私有(private)成员。我的问题是我应该如何编写赋值运算符。复制构造函数没有问题,但赋值运算符不起作用。classBFDMFilter{private:constBGraph*m_battlemap;conststd::shared_ptrm_mv_ab;public:BFDMFilter():m_battlemap(nullptr),m_mv_ab(){}BFDMFilt

c++ - CRTP 静态多态性 : Using the Base Class to Call Derived Methods

C++中virtual的主要好处之一是能够使用基类(指针或引用)调用派生方法。我正在阅读usingCRTPtoimplementstaticpolymorphism,但我不明白如何使用这种技术实现上面提到的内容,因为当需要模板时,我无法将函数声明为采用Base类型。在我看来,文章中描述的内容可以通过简单地使用函数重载来实现,所以我确信这种技术一定有更多。(PS:在对thisquestion的回答的评论中提到了这个确切的问题,但不幸的是没有人回复它:“vtables真正提供的是使用基类(指针或引用)来调用派生方法。你应该在这里展示它是如何用CRTP完成的。”)这是我的最小代码,它给出了错

c++ - 为什么即使 base 具有用户声明的构造函数也会发生零初始化?

这会打印出0,表示data是零初始化。为什么即使base具有用户声明的构造函数也会发生这种情况?structbase{base(){}intdata;};structderived:base{derived()=default;};intmain(){std::cout如果derived有一个用户声明的构造函数,那么它会打印出一个随机值。为什么零初始化依赖于派生类而不是基类? 最佳答案 规则是专门写来涵盖structS{inti;std::strings;};如果没有任何用户提供的构造函数,即使隐式生成的默认构造函数不是平凡的,S(

c++ - std::unique_ptr 试图引用已删除的函数

我已经使用Unity一段时间了,然后回来使用VisualStudio2015做一些C++。我遇到了这个类定义classA{public:A();virtual~A();A(constA&)=delete;A&operator=(constA&)=delete;private:…}这个类是动态分配的,如下所示:ObjPtrobj=ObjPtr(newA());哪里ObjPtr是定义的类型,看起来像:typedefstd::unique_ptrobjPtr;并将这些创建的对象添加到std::vector使用std::move.有一次,我需要遍历对象列表,如果我找到满足我条件的对象,请保留一

c++ - 奇怪的运算符重载, "operator T& () const noexcept { return *_ptr; }"

我研究了一下,operator函数的格式是(returnvalue)operator[space]op(arguments){implementation}但是,在std::reference_wrapper实现中,有一个运算符重载函数声明为operatorT&()constnoexcept{return*_ptr;。这个运算符和T&operator()constnoexcept{return*_ptr;不同吗?}?.如果两者不同,那么第一个有什么用? 最佳答案 运算符T&()constnoexcept;是一个user-define

c++ - 为什么我不能将 std::unique_ptr 用作 "template<class> class"参数?

这段代码:#includetemplateclassPtr>classA{Ptrints;};usingB=A;产生以下错误(使用GCC6.3):a.cpp:6:28:error:type/valuemismatchatargument1intemplateparameterlistfor‘templateclassPtr>classA’usingB=A;^a.cpp:6:28:note:expectedatemplateoftype‘templateclassPtr’,got‘templateclassstd::unique_ptr’现在,我可以像这样解决这个问题:templateu

c++ - 如何获得指向 shared_ptr 的指针?

我现在正在破解一个旧的C代码,试着让它更像C++/Boost风格:有一个资源分配函数如下所示:my_src_type*src;my_src_create(&src,ctx,topic,handle_src_event,NULL,NULL);我尝试用shared_ptr包装src:shared_ptrpSrc;刚才忘记说了。我需要循环执行此操作std::map>dict;my_src_type*raw_ptr;BOOST_FOREACH(std::stringtopic,all_topics){my_src_create(&raw_ptr,ctx,topic,handle_src_eve

c++ - 如何从 C++ 中的 Base64 编码字符串在 GDI+ 中创建图像?

我有一个应用程序,目前是用C#编写的,它可以采用Base64编码的字符串并将其转换为图像(在本例中为TIFF图像),反之亦然。在C#中,这实际上非常简单。privatebyte[]ImageToByteArray(Imageimg){MemoryStreamms=newMemoryStream();img.Save(ms,System.Drawing.Imaging.ImageFormat.Tiff);returnms.ToArray();}privateImagebyteArrayToImage(byte[]byteArrayIn){MemoryStreamms=newMemoryS

c++ - 代码审查问题——我应该允许将 auto_ptr 作为参数传递吗?

考虑我最近在我们的代码库中看到的以下示例代码:voidClassA::ExportAnimation(auto_ptranimation){...doessomething}//callingmethod:voidclassB::someMethod(){auto_ptranimation(newCAnimation(1,2));ClassAclassAInstance;classAInstance.ExportAnimation(animation)...dosomemorestuff}我不喜欢这样——我宁愿这样写:voidClassA::ExportAnimation(CAnima