草庐IT

com_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++ - 使用带有自定义释放器的 std::unique_ptr 来包装原始指针

我正在尝试使用libsvm对于某个复杂的应用程序,并且由于libsvm主要是一个C库,因此在加载某些数据后,必须使用自定义API函数来释放内存。这就是我的意思:structsvm_model*model;model=svm_load_model("pathtomodelfile");//dosomeprocessingsvm_free_and_destroy_model(&this->model);这些是我使用的libsvmAPI函数的定义:structsvm_model*svm_load_model(constchar*model_file_name);voidsvm_free_an

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++ - 将 COM 事件公开给 VBScript (ATL)

我使用“ATL简单对象”向导用ATL在C++中构建了一个COM服务器DLL。我关注了微软的ATLDLLCOMServer例子。一切正常,除了一件事:我没有在VBScript中接收COM事件。我确实收到了C#中的事件。我在早期基于MFC的实现中使用VBScript处理事件作为ActiveX控件。我的控件是这样定义的:classATL_NO_VTABLECSetACLCOMServer:publicCComObjectRootEx,publicCComCoClass,publicIConnectionPointContainerImpl,publicCProxy_ISetACLCOMSer

c++ - 将 weak_ptr 与原始指针进行比较不起作用,正在寻找替代方案

我有一个SpriteManager类,它为我加载和缓存Sprite,并从缓存中删除未使用的Sprite。无论如何,这就是我的想法,我有点卡住了。我有一个map>我在其中存储Sprite,并使用weak_ptr生成shared_ptr的。现在我正在尝试使用一个删除器,它也从map中删除位图,它看起来像这样(显然不起作用):[&bitmaps](ALLEGRO_BITMAP*bmp){for(autoit=bitmaps.begin();it!=bitmaps.end();++it){if((*it).second==bmp){bitmaps.erase(it);al_destroy_bi

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++ - "COM-like"框架解决了哪些问题?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我经常看到GObject库与类似COM-Windows的解决方案相比,一般来说,我真的不明白这个框架应该解决什么样的问题,以及采用它们有什么好处。我找到了一些小的答案,比如“它是一个可以轻松地将C库移植到其他语言的包装器”,但是GObject还提供了其他功能,比如信号/槽机制,还有其他涉及的东西,但老实说我不明白关于这件事的大局。你能用通俗易懂的英语解释一

c++ - 动态分配数组的 unique_ptr 替代方案

我写了一个类,它必须与一些需要一些C风格数组(或至少指向第一个元素的指针)作为参数的旧代码接口(interface)。这些数组是我类的成员,它们特别大(50kb)所以我想把它们放在堆上,这样我类的对象在堆栈上就不会很大。我非常相信使用资源管理对象,所以我宁愿自己不在堆上管理这些数组。我发现使用unique_ptr的效果特别好。例如:std::unique_ptrsomeArrayName并使用:someArrayName(newSOMETYPE[someLargeSize])在我的构造函数的初始化列表中。这允许我使用.get()将它们用作常规C数组需要它作为参数的函数的方法,我不必自己