草庐IT

share-extension

全部标签

c++ - 将 "this"称为 shared_ptr?

这个问题在这里已经有了答案:std::shared_ptrofthis(2个答案)关闭8年前。我正在学习C++11特性,特别是shared_ptr,我在引用this并将其用作其他类的引用时遇到问题.这样做的原因是我有一个Simulation实例,该实例被传递给模拟中的其他实例(例如Apple),因此它们可以自己修改模拟,甚至将自己从模拟中移除。在我更复杂的代码中,我得到了一个doublefree错误(当程序存在时),据我所知fromhere我不应该在同一个原始对象上创建两次shared_ptr。当模拟类不知道this时,如何将this作为shared_ptr传递给Apple对象已经是s

c++ - shared_ptr 如何破坏对齐

我正在阅读有关DirectXMath的文档,无意中发现了下一段:AsanalternativetoenforcingalignmentinyourC++classdirectlybyoverloadingnew/delete,youcanusethepImplidiom.IfyouensureyourImplclassisalignedvia__aligned_mallocinternally,youcanthenfreelyusealignedtypeswithintheinternalimplementation.Thisisagoodoptionwhenthe'public'cl

c++ - 比较 shared_ptr 对象是否相等

是否有标准谓词来比较shared_ptr托管对象的相等性。templateinlinebooltarget_equal(constT&lhs,constU&rhs){if(lhs&&rhs){return*lhs==*rhs;}else{return!lhs&&!rhs;}}我想要类似于上面代码的东西,但如果已经有标准解决方案,我会避免自己定义它。 最佳答案 不,没有标准的解决方案。shared_ptr等的相等运算符只比较指针而不比较托管对象。你的解决方案很好。我建议这个版本检查指向的对象是否相同,如果共享指针之一为null而另一个

c++ - std::shared_ptr operator [] 等效访问

在C++17中,std::shared_ptr有一个运算符[]以允许索引基于vector的指针(http://en.cppreference.com/w/cpp/memory/shared_ptr/operator_at)如果这样的运算符不可用,我如何获得类似的访问,我仍然想对元素数组使用智能指针,例如:std::shared_ptrdata;data.reset(newunsignedchar[10]>;//usedata[3]; 最佳答案 像这样:data.get()[3]但是,请记住Nathan在评论中所说的话。std::sh

c++ - `weak_ptr` 和 `shared_ptr` 访问如何是原子的

std::shared_ptrint_ptr;intmain(){int_ptr=std::make_shared(1);std::threadth{[&](){std::weak_ptrint_ptr_weak=int_ptr;autoint_ptr_local=int_ptr_weak.lock();if(int_ptr_local){cout上面的代码线程安全吗?我读了这个答案Aboutthread-safetyofweak_ptr但只是想确保上面的代码是线程安全的。我问这个的原因是,如果上面的代码确实是线程安全的,我无法理解std::weak_ptr是如何实现的。和std::s

c++ - 如何在标准 C++11 中创建 shared_lock 或 upgrade_lock?

新标准std::shared_lock我非常想念模板类。在Boost.Thread中有boost::shared_lock,甚至boost::upgrade_lock存在。为什么,没有std::shared_lock和std::unique_lock在C++11中?如何获得与boost::shared_lock类似的行为?有,但在纯C++11中?我正在考虑使用boost::shared_lock,但这没有多大意义,因为std::mutex没有lock_shared()成员。而且,没有诸如std::shared_mutex之类的。. 最佳答案

c++ - 通过采用 void * 的 C 接口(interface)传递 shared_ptr

我有一个使用SDL的C++项目,特别是SDL事件。我想将事件系统用于传入的网络消息,就像它用于UI事件一样。我可以定义一个新的事件类型并附加一些任意数据(参见thisexample)。如果我使用普通指针,这就是我会做的:Uint32message_event_type=SDL_RegisterEvents(1);/*Inthemaineventloop*/while(SDL_Poll(&evt)){if(evt.type==message_event_type){Message*msg=evt.user.data1;handle_message(msg);}}/*Networkingc

c++ - native-app 和 chrome-extension 之间的通信

我有一个用C++和一个chrome扩展程序编写的native应用程序。我正在使用“chrome原生消息”在它们之间进行通信。native应用程序代码:intmain(intargc,char*argv[]){unsignedinta,c,i,t=0;std::stringinp;do{inp="";t=0;//Sumthefirst4charsfromstdin(thelengthofthemessagepassed).for(i=0;i>0)&0xFF))>8)&0xFF))>16)&0xFF))>24)&0xFF));////Nowwecanoutputourmessagestd:

c++ - "Connecting"SDL_Surface 到 shared_ptr

我想知道如何将SDL_Surface*与shared_ptr连接起来?在删除SDL_Surface之前,我需要调用SDL_FreeSurface(SDL_Surface*)。如何在shared_ptr中“修改删除过程”? 最佳答案 只需将SDL_FreeSurface传递给构造函数:std::shared_ptrshared_surf(SDL_LoadBMP("foo.bmp"),SDL_FreeSurface);请确保您不使用SDL_SetVideoMode或SDL_GetVideoSurface返回的指针执行此操作。

c++ - shared_ptr 的循环依赖问题是什么?

我阅读了共享指针并了解如何使用。但我一直不明白共享指针的循环依赖问题以及弱指针将如何解决这些问题。谁能解释清楚这个问题? 最佳答案 问题没那么复杂。让-->代表一个共享指针:Therestoftheprogram-->objectA-->objectB^|\|\vobjectC所以我们得到了一个共享指针的循环依赖。每个对象的引用计数是多少?A:2B:1C:1现在假设程序的其余部分(或者至少是其中包含指向A的共享指针的部分)被销毁了。那么A的引用计数减1,所以循环中每个对象的引用计数都为1。那么删除了什么?没有什么。但是我们要删除什么