草庐IT

Shared-Preferences

全部标签

c++ - enable_shared_from_this(c++0x): what am I doing wrong?

我只是在研究即将推出的新C++标准中的智能指针。但是我没有掌握shared_from_this函数的用法。这是我所拥有的:#include#includeclassCVerboseBornAndDie2:publicstd::enable_shared_from_this{public:std::stringm_Name;CVerboseBornAndDie2(std::stringname):m_Name(name){std::coutp=vbad->shared_from_this();}并在行中抛出std::bad_weak_ptr异常std::shared_ptrp=vbad-

c++ - 关于 shared_ptr 析构函数中实现错误的困惑

我刚看到HerbSutter的演讲:C++andBeyond2012:HerbSutter-atomicWeapons,2of2他展示了std::shared_ptr析构函数实现中的错误:if(control_block_ptr->refs.fetch_sub(1,memory_order_relaxed)==0)deletecontrol_block_ptr;//B他说,由于memory_order_relaxed,delete可以放在fetch_sub之前。At1:25:18-Releasedoesn'tkeeplineBbelow,whereitshouldbe这怎么可能?存在h

c++ - 为什么我不能使用 std::make_shared 的实例化作为指向函数的指针?

当类具有默认构造函数时,我可以使用std::make_shared的实例化,就像使用指向函数的指针一样。这可能是因为实例化的模板必须编译并存储在内存中,并且它的地址必须存在。#include#includeclassDefaultConstructible{};typedefstd::function()>Generator;intmain(){Generatorgenerator(std::make_shared);std::shared_ptrdefConst=generator();return0;}但是当我添加一个非平凡的构造函数时,同样的事情失败了:#include#incl

c++ - 为什么 const shared_ptr<const T>& 和 const shared_ptr<T>& 显示不同的引用计数?

对于下面的代码片段,它显示了方法中不同的引用计数。有人可以解释为什么这些值不同吗?classFoo{};voidf1(conststd::shared_ptr&ptr){std::cout&ptr){std::coutptr(newFoo);std::cout对应的输出:main():counts:1f1():counts:1f2():counts:2main():counts:1 最佳答案 请注意std::shared_ptr和std::shared_ptr是不同的类型(即具有不同模板类型参数的类模板实例化是不同的类型)。当你通过

c++ - 关于 shared_ptr 和指向成员运算符 `->*` 和 `std::bind` 的指针

最近我发现shared_ptr没有指向成员运算符->*的指针。我创建了一个简单的例子:templateautoinvoke1(Pointerp,Functionf,Args...args)->decltype((p->*f)(args...)){return(p->*f)(args...);}structA{voidg(){std::coutsa=std::make_shared();invoke1(sa,&A::g);//compileerror!!}Q1:为什么会这样?为什么shared_ptr没有这个运算符?我为shared_ptr添加了这样的运算符,示例开始运行:templat

c++ - 返回 null shared_ptr 是否正确?

例如,有一个查找对象的函数,如果找到对象则返回shared_ptr,并且必须以某种方式指示未找到对象。std::vectorStorage::objects;std::shared_ptrStorage::findObject(){if(objects.find){returnobjects[x];}else{returnnullptr;}}std::shared_ptrobj=Storage::findObject();if(obj){print("found");}else{print("notfound");}像上例那样返回用nullptr隐式初始化的shared_ptr是否正确

c++ - 调用删除器时 shared_ptr 是否仍然拥有它的对象?

我有一个带有自定义删除器的std::shared_ptr,在那个删除器中,我想获取原始std::shared_ptr的临时拷贝。用代码形式表示:structFoo:publicstd::enable_shared_from_this{};voiddeleter(Foo*f){{std::shared_ptrtmp=f->shared_from_this();//LineA}deletef;}intmain(){std::shared_ptrfoo(newFoo,&deleter);}我的问题是:在A行,关于shared_from_this()的调用有什么可以说的吗?合法吗?如果是这样,

c++ - enable_shared_from_this 和堆栈上的对象

有没有办法阻止shared_from_this()调用堆栈分配的对象?基类列表中的enable_shared_from_this是类用户的强指标,但有没有办法强制正确使用?示例代码:classC:publicenable_shared_from_this{public:shared_ptrmethod(){returnshared_from_this();}};voidfunc(){Cc;shared_ptrptr=c.method();//exceptioncomingfromshared_from_this()} 最佳答案 因此

c++ - 类构造函数上 boost::shared_ptr 的默认值

假设我有这样的类classA{public:A(inta,boost::shared_ptrptr){//whatever!}};我的问题是,该ptr的默认值是多少?我希望能够使用创建该类的实例AmyA(5);当然我知道我可以用一个参数创建另一个构造函数,但我正在寻找类似的东西A(inta,boost::shared_ptrptr=WAT?)这可能吗?目前我使用的是双构造函数方式,但这样做会很棒。 最佳答案 #includeA(inta,boost::shared_ptrptr=boost::make_shared())检查http

c++ - 同时重置和复制 shared_ptr 是否线程安全?

Boostdocumentation描述了从多个线程同时访问共享指针时的行为。他们特别举了一些例子:shared_ptrp(newint(42));//---Example1---//threadAshared_ptrp2(p);//readsp//threadBshared_ptrp3(p);//OK,multiplereadsaresafe//---Example2---//threadAp.reset(newint(1912));//writesp//threadBp2.reset();//OK,writesp2//---Example3---//threadAp=p3;//re