草庐IT

c++ - 提升.MultiIndex : Are there way to share object between two processes?

我有一个大约10Gb的Boost.MultiIndex大数组。为了减少读取,我认为应该有一种方法将数据保存在内存中,另一个客户端程序将能够读取和分析它。组织它的正确方法是什么?数组看起来像:structparticleID{intID;//realIDforparticlefromGadget2file"ID"blockunsignedintIDf;//postitioninthefileparticleID(intid,constunsignedintidf):ID(id),IDf(idf){}booloperator,BOOST_MULTI_INDEX_MEMBER(particl

c++ - 为什么使用一个 vs 另一个 : `boost::shared_array` VS `boost::shared_ptr<std::vector>` ?

因此,要处理用于图像或类似内容的大内存块,显然有很多选择。因为我是智能指针和RAII的粉丝,所以我想知道它是否更智能:一个shared_ptr到一个std::vector或使用指向动态分配数组的shared_array。选择一个与另一个相比,在概念、实践和性能方面的影响是什么? 最佳答案 这与比较std::vector与C数组相同。将shared_array视为RAIIC数组。你得到的只是自动内存释放。在处理返回数组的第3方代码时很有用。理论上它在某些边缘情况下比std::vector更快,但灵active和安全性要差得多。std:

c++ - 在 UML 中绘制智能指针

在UML类图中是否有一种普遍接受的方式来描述共享指针(boost::shared_ptr或std::shared_ptr)持有的对象?特别是,应该使用像聚合或组合这样的空钻石还是全钻石? 最佳答案 我不知道关于如何将智能指针建模为关系的总体共识。黑色菱形表示控制生命时间,白色菱形表示不控制生命时间,因此您可以在本地同意unique_ptr使用黑色菱形,shared_ptr全黑菱形,weak_ptr使用白色菱形。如果你真的想为smart_ptr建模,我建议给关系添加一个属性类:0|/----------------\+--+share

c++ - shared_ptr 与 CComPtr

我有点习惯通过COM进行引用计数的概念,但我对shared_ptr有点陌生。我在shared_ptr中没有找到CComPtr的几个不错的属性,我想知道防止误用shared_ptr的模式是什么。AddRef/Release模式保证每个对象只有一个引用计数(引用计数存储在对象本身),因此当您有一个随机指针围绕它创建一个CComPtr时,它是安全的。另一方面,shared_ptr有一个单独的refcount指针,所以在一个对象上创建一个新的shared_ptr是不安全的(为什么标准提供了一个构造函数,它在shared_ptr上采用T*,如果这样做很不安全?)。这似乎是一个很大的限制,我不明白

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++ - 共享库 QT 资源

我又遇到了另一个问题。这一次,我有一个.dll,一个包含.qrc(QT资源)文件的共享库,问题是,当我尝试访问库的资源之一时,它不起作用。我尝试实现:Q_INIT_RESOURCE(resourcefilename)它仍然无法正常工作。(它说找不到“qInitResources_resourcefilename()”。) 最佳答案 没关系。我找到了解决方案。未找到qInitResources_name()。所以,我在共享库中创建了一个函数intRmiLib::startResources(){externintqInitResour

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