草庐IT

shared-libraries

全部标签

c++ - std::shared_ptr - 将共享指针作为参数传递的最佳实践

我已经离开严肃的C++大约十年了。我又回来了,目前正在从事一个项目,以完全熟悉C++11。关于如何最好地传递std::shared_ptr,我遇到了一些生存危机。举个简单的例子,采用以下设置:classServiceB{public:ServiceB(){}};classServiceA{public:ServiceA(std::shared_ptr&serviceB):_serviceB(serviceB){}private:std::shared_ptr_serviceB;};classRoot{public:Root():_serviceB(std::shared_ptr(new

c++ - 将 shared_ptr 分配给数组的偏移量

假设我有一个数组的shared_ptr:std::shared_ptrsp(newT[10],[](T*p){delete[]p;});还有一个方法:shared_ptrptr_at_offset(intoffset){//Iwanttoreturnashared_ptrto(sp.get()+offset)here//inawaythatthereferencecounttospisincremented...}基本上,我想做的是返回一个新的shared_ptr来增加引用计数,但指向原始数组的偏移量;我想避免在调用者以某个偏移量使用数组时删除数组。如果我只是返回sp.get()+of

c++ - Boost Graph Library 中的顶点描述符和索引有什么区别?

在Boost图形库中,什么时候应该使用顶点描述符,什么时候使用索引?由于vertex_descriptor的实现实际上是无符号整数,那么这两个东西是否具有相同的值? 最佳答案 vertex_descriptor仅在您使用vector(或类似的)作为顶点的基础数据结构(即boost::vecS)时作为索引。如果您使用不同的底层数据结构,则顶点描述符不一定是索引。例如,如果您使用std::list/boost::listS-列表不使用基于索引的访问方法。相反,每个vertex_descriptor将改为指向列表项的指针。因此,每次你想在

c++ - 创建 shared_ptr 到堆栈对象

在我的方法中,Player对象的创建方式如下:Playerplayer(fullName,age);我的老师给了我们一段带有构造函数的代码,该构造函数将shared_ptr传递给玩家对象。//constructoroftheclassSomeClass(conststd::shared_ptrclient,std::shared_ptrplayer)假设我们要调用SomeClass的构造函数并传递我们在堆栈上创建的播放器对象。从堆栈对象创建shared_ptr是否安全/可能/好?为了让问题更容易理解,假设我们有两个大代码项目,我们想合并它们,以便从一个项目调用另一个项目的方法,我们是否

c++ - 热插拔 C++ 库可能吗?

我正在寻找“热插拔”C++代码库。我有兴趣让这项技术在Linux/Mac/Windows之间跨平台工作。基本上我想要定义所有可调用接口(interface)的主程序#include“StateMachine.h”。然后在运行时和执行期间加载和卸载StateMachineLibrary.a让我的应用程序使用不同的状态机。我的一个想法是可以做一些事情,比如编写一个包装器,将编译后的代码加载到我自己的malloc内存中,并在该内存中创建函数指针?动机是我的项目的状态机部分会频繁更改并需要重新编译,也将允许主应用程序在加载不同状态机的情况下继续运行。出于某些顾虑,我希望使用“热插拔”库而不是L

c++ - 防止多个 shared_ptr 指向同一个对象的最佳方法

将相同的指针发送到两个不同的shared_ptr是不好的,它会导致双重释放,如下所示:int*p=newint;std::shared_ptrp1(p);std::shared_ptrp2(p);//BAD您可以使用std::enable_shared_from_this实现相同的目的:classGood:publicstd::enable_shared_from_this{public:std::shared_ptrgetptr(){returnshared_from_this();}};intmain(){std::shared_ptrgp1(newGood);std::share

C++11 std::shared_ptr + boost::序列化

这个问题在这里已经有了答案:Howcanboost::serializationbeusedwithstd::shared_ptrfromC++11?(7个答案)boostserializeandstd::shared_ptr(2个答案)关闭9年前。嗨,有人已经成功地使用boost::serialization序列化了C++11std::shared_ptr。那里有很多过时的帖子,但没有一个具有可接受的解决方案。我不打算讨论为什么我要使用std::shared_ptr只是接受它!我找到了另一个帖子:boostserializeandstd::shared_ptr但它没有回答我如何序列化

c++ - 模拟动态加载程序以修复共享库偏移量

我在工作中遇到了一个有趣的情况,我正试图为其找到一个好的解决方案。我们有在多核MIPS裸机(无内核)上运行的代码。我们需要与一些需要升级的第三方代码集成。我正在考虑将第3方代码编译为PIC,然后在下载此代码时更改代码/数据符号的GOT(我可以控制代码所在的位置)。此外,假设进入第3方代码的接口(interface)没有改变,因此没有新的PLT/GOT条目。这行得通吗?我还应该考虑哪些其他事项? 最佳答案 正确答案是否比“嵌入动态链接器/加载器”长?您的问题似乎与ld.so等解决的问题相同。描述动态链接器/加载器必须考虑的所有事情是书

c++ - 使用 shared_ptr 和 glutInit 导致段错误

问了this在我尝试了很多东西并发现问题与glutInit有关之前。采取以下代码示例:main.cpp#include#include#includeusingnamespacestd;intmain(intargcp,char**argv){shared_ptrabc;glutInit(&argcp,argv);cout编译:g++-std=c++11-g-Wall-oappxmain.cpp-lGL-lGLU-lglut使用g++5.2.1、ubuntu15.10导致可执行文件立即崩溃(没有“Hello!”输出)只是注释掉这一行shared_ptrabc;将修复崩溃。因为我想在项目

c++ - 可选共享库

我注意到依赖共享库的应用程序失败:如果您缺少某些依赖项,应用程序将在加载时失败即使用户无意使用依赖项的功能。我希望我的应用程序比这更好。理想情况下,与其分发多达n个不同的包,其中n=numberOfSupportedArchitectures*numberOfSupportedOS*‖(对于每个共享库)(备选方案的数量)当发现我想要但不需要的库不存在时,我会在加载时发现“加载共享库时出错”异常,然后以一种简单地避免使用未解析链接的方式继续执行担心的。但显然没有人能捕获异常(exception)。如果缺少某些东西,它甚至在main()开始之前就全部折叠了。我最接近控制加载过程的方法是自己