草庐IT

shared_lib

全部标签

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++ - Boost lib 链接器错误 Visual C++

我下载了Launchy的源代码并尝试在VisualStudio2005中构建它。Launchy项目是使用VC7构建的,因此我不得不将项目文件更新为VC8,并且该过程似乎进展顺利。但是,Launchy还使用Boost1.33.1库和我构建的是Boost1.41.0库(Boost的Prop,使更新的库更容易构建),所以我还更新了项目以指向我的新Boost库安装。现在我收到以下链接器错误:fatalerrorLNK1104:cannotopenfile'libboost_regex-vc80-mt-sgd-1_41.lib'我查看了Boostlib目录,我能找到的最接近的匹配是...libb

【问题解决】make[2]: *** 没有规则可制作目标“/usr/lib/x86_64-linux-gnu/libopencv_XXX错误

记录一下使用ubuntu中的各种问题【问题详述】make[2]:***没有规则可制作目标“/usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2.0”,由“/home/victor/cooperate/ur5_husky/devel/lib/libmoveit_lazy_free_space_updater.so.1.1.13”需求。停止。make[1]:***[CMakeFiles/Makefile2:26268:moveit/moveit_ros/perception/lazy_free_space_updater/CMakeFiles/mov

Qt静态链接库(.lib .a)、动态链接库(.dll)创建和使用教程

1库介绍先对库进行介绍,后对Qt静态链接库(.lib.a)、动态链接库(.dll)进行创建和使用的介绍!库是什么库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:静态库是什么之所以成为【静态库】,是因为在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接

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++ - DLL 项目不生成 .exp 和 .lib 文件

所以,我有一个包含3个项目(2个DLL和1个.exe)的C++解决方案。这是基本的依赖表示:应用程序-->DLL2应用程序-->DLL1DLL2-->DLL1我遇到的问题是DLL2(在构建它时)确实会生成.dll但不会生成.lib和.exp我需要在应用程序项目中正确引用DLL2。但是,DLL1确实会生成这些文件,而且我已经将DLL1的设置与DLL2的设置进行了比较,但我找不到可能存在的差异。 最佳答案 对此的简单解释是您只是忘记导出任何内容。如果没有导出,链接器将不会创建.lib/.exp文件。您可以通过在DLL上运行dumpbin

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

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

c++ - new 和 make_shared 用于共享指针

我遇到了this@kerekSB状态的帖子和答案之一std::shared_ptrp1=std::make_shared("foo");std::shared_ptrp2(newObject("foo"));Inyourcode,thesecondvariableisjustanakedpointer,notasharedpointeratall.Nowonthemeat.make_sharedis(inpractice)moreefficient,becauseitallocatesthereferencecontrolblocktogetherwiththeactualobject