jjzjj

shared_ptr

全部标签

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++ - 将 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++ - 返回指向 const 对象的 const 共享指针的 const vector

给定以下基于共享指针容器的类,classFoo;classBar{public://...conststd::vector>&getFoos()const{returnfoos_;}private:std::vector>foos_;};不会编译因为invalidinitializationofreferenceoftype‘conststd::vector,std::allocator>>&’fromexpressionoftype‘conststd::vector,std::allocator>>’foos_成员需要指向可变的Foo对象供Bar对象内部使用,但我不想要客户端代码调用

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++ - 动态分配数组的 unique_ptr 替代方案

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

usingPtr=std::unique_ptr;Ptrf(boolarg){std::listlist;Ptrptr(newint(1));list.push_back(std::move(ptr));if(arg){Ptr&&obj1=std::move(list.front());//Here|obj1|and|list.front()|stillpointtothesamelocation!list.pop_front();returnstd::move(obj1);}else{Ptrobj2=std::move(list.front());list.pop_front();r

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读者知道一些图书馆的答案。通过查看代码,

c++ - 将 unique_ptr 的 vector 传递给对象。 vector 成为成员变量。正确的做法?

我将称之为“所有者”的一个对象在其生命周期内拥有数据对象vector的明确所有权。这些存储为unique_ptr的vector。一个对象/类,称为“Output”,需要在许多不同的方法中查看这些数据对象,因此某种引用/指针/变量是“Output”的成员变量.Output在其构造函数中接收数据对象的vector。我想到了三种方法来实现这一点。最好的方法是什么?选项1-“输出”对象将数据vec存储为常量引用:classOutput{//outputwantsthedata:public:Output(std::vector>const&in):my_lot_of_data(in){};st