草庐IT

shared-libraries

全部标签

c++ - 在基类中调用 shared_from_this() 时的 bad_weak_ptr

我有一个SuperParent类,一个Parent类(派生自SuperParent)并且都包含一个shared_ptr到一个Child类(它包含一个weak_ptr到一个SuperParent)。不幸的是,我在尝试设置Child的指针时遇到了bad_weak_ptr异常。代码如下:#include#include#include#includeusingnamespaceboost;classSuperParent;classChild{public:voidSetParent(shared_ptrparent){parent_=parent;}private:weak_ptrpare

c++ - 适当使用 boost::shared_ptr?

关于boost::shared_ptr的问题:我有3个类(class)。A是某种负责管理一切的主类。B是一个类,它只具有完成某些工作的功能。Dispatcher只是一个围绕单独线程的类,它从B的Instaces中获取工作,在此线程中完成。所以它有点像这样工作:A有一个Dispatcher实例。现在,A偶尔会生成一个B的实例,并将其传递给调度程序。重要的是,B在完成后需要调用A::callback()。这就是为什么B在其构造函数中获取对A的引用(参见下面的代码)A.hppclassA:publicboost::enable_shared_from_this{public:A();void

c++ - 将 auto_ptr 转换为 shared_ptr

如何将std::auto_ptr更改为boost::shared_ptr?这是我的限制:1.我正在使用一个API类,让我们称之为only_auto返回这些指针2.我需要在auto_only中调用3.我的语义涉及共享,所以我确实需要使用shared_ptr)4.类中only_autooperator=private防止copy5.only_auto对象必须通过克隆调用std::auto_ptrcreat_only_auto();我知道模板显式shared_ptr(std::auto_ptr&r);但是我该如何在这种情况下使用它呢?一个super简化的代码示例:#include#inclu

c++ - 将 vector<shared_ptr<Derived>> 传递给需要 vector<shared_ptr<Base>> 的函数

我使用的代码结构有问题,如下(简化):classSPoint{public:SPoint(doublex,doubley,doublez):_x(x),_y(y),_z(z){}protected:double_x,_y,_z;}classPoint3D:publicSPoint{public:Point3D(doublex,doubley,doublez):SPoint(x,y,z){//defaultvaluesforUandV}protected:doubleU,V;}这些点用于创建折线:classSPolyline{public:SPolyline(constvector>&p

c++ - 如何在 2 个不同的共享库中调用具有相同符号的函数?

我有几个用C++编写的同一个库的版本。我需要并排比较它们。这些库使用相同的命名空间、函数名称并采用相同的参数。当我同时链接两个或多个库时,是否有任何方法可以控制我使用哪个版本的库? 最佳答案 您无法链接两个具有相同符号的库并同时访问这两个库。但是,您可以构建自己的瘦包装器库来消除两个版本化库的歧义:定义一个抽象类Wrapper,使用抽象虚函数实现目标库的功能在名为WrapperImpl的类中定义Wrapper的实现,该类从虚拟方法调用目标库定义一个独立的方法Wrapper*MakeImpl返回newWrapperImpl()多次将W

c++ - 共享对象和dll之间的区别

我有一个库,它在编译时正在构建一个名为libEXAMPLE.so(在so.le文件夹中)的共享对象,以及一个名为EXAMPLE.so的dll(在dll文件夹中)。这两个共享对象的大小非常相似,看起来完全是一回事。在互联网上搜索显示,程序使用dll进行符号解析的方式与使用共享对象的方式可能有所不同。你们能帮我理解一下吗? 最佳答案 “DLL”是windows喜欢给自己的动态库命名的方式"SO"是linux喜欢给他们的动态库命名的方式两者的目的相同:动态加载。Windows使用PE二进制格式,linux使用ELF。体育:http://e

c++ - g++ std::bind 错误与 shared_ptr

我无法理解为什么以下代码无法编译。#include#includeclassFoo{public:voidBar(inti){}};voidX(std::function)>f){}intmain(){std::shared_ptrf(newFoo);autof1(std::bind(&Foo::Bar,std::placeholders::_1,1));X(f1);return0;}g++(4.6.3)输出...nfileincludedfrom/usr/include/c++/4.6/memory:80:0,fromtest.cpp:1:/usr/include/c++/4.6/f

c++ - Netbeans/C++ : Link 2 projects together (Executable/Dynamic Library)

我目前正在创建2个项目。第一个是可执行应用程序。第二个是动态库。有没有办法将动态库链接到Netbeans中的应用程序,这样当我运行应用程序时,我可以加载到动态库中。我知道我可以只复制构建的文件,但这很麻烦,因为我需要测试它是否每分钟都在工作。有人知道怎么做吗?我很确定这是可能的,因为它在很多情况下都非常有用。 最佳答案 是的,这是可能的:应用程序项目->右键单击​​->属性->链接器Libraries->...->AddProject->选择你的库项目(->检查Build并在必要时选择Configuration)在C或C++编译器设

c++ - boost::shared_mutex vs boost::mutex 用于多线程写入?

我有一个场景,其中多个线程正在写入一个公共(public)缓冲区(一个映射),每个线程可能有也可能没有相同的键。有人可以建议我是应该使用boost::shared_mutex还是只使用boost::mutex?我的理解是boost::shared_mutex适用于单个编写器和多个读取,这不是我想要的。这是否使boost::mutex更适合这种情况?提前致谢 最佳答案 是的,boost::shared_mutex不是您的情况,因为您没有纯读者并且有多个作者。只需使用boost::mutex强制对共享数据进行独占访问。

c++ - 哪些库对 std::make_shared 使用了 "We Know Where You Live"优化?

两年前,StephanT.Lavavejdescribedaspace-savingoptimization他在Microsoft的std::make_shared实现中实现了这一点,我从与他的交谈中了解到,Microsoft并不反对采用此优化的其他库实现。如果您确定其他库(例如,用于GnuC++、Clang、IntelC++以及Boost(用于boost::make_shared))是否采用了此实现,请提供答案。我还没有准备好访问那么多make_shared实现,我也不想深入研究那些我必须看看他们是否已经实现了WKWYL优化的东西,但我希望SO读者知道一些图书馆的答案。通过查看代码,