草庐IT

compare_exchange_weak

全部标签

c++ - 为什么我们需要 C++11 中的 weak_ptr?

我正在阅读NicolaiM.Josuttis的“TheC++StandardLibrary”一书以了解弱指针。作者提到了需要weak_ptr的两个原因,我不明白第二个原因。任何人都可以提供一个简单的解释以及以下原因的示例(引自书中):Anotherexampleoccurswhenyouexplicitlywanttosharebutnotownanobject.Thus,youhavethesemanticsthatthelifetimeofareferencetoanobjectoutlivestheobjectitrefersto.Here,shared_ptrswouldnev

c++ - 使用 std::weak_ptr 和别名构造函数打破循环引用:听起来还是有问题?

我还没有在任何主要的C++论坛/博客(例如GotW)上找到以下打破循环引用的方法,所以我想问一下该技术是否已知,其优缺点是什么?classNode:publicstd::enable_shared_from_this{public:std::shared_ptrgetParent(){returnparent.lock();}//thegetterfunctionsensurethat"parent"alwaysstaysalive!std::shared_ptrgetLeft(){returnstd::shared_ptr(shared_from_this(),left.get())

C++ weak_ptr.lock() 段错误

所以我有这个函数来添加监听器,它转换一个类的共享指针,以便我稍后在收到通知时可以调用它。voidregisterListener(std::shared_ptrlistener){if(!listener){qCWarning(OBSERVER_LOGGER)lock()){if(listener==shared){return;}iter++;}else{iter=listeners.erase(iter);}}autoweak=std::weak_ptr(listener);listeners.push_back(weak);}voidnotify(std::function)>o

c++ - 即使在 std::shared_ptr 拥有之后,shared_from_this 还是空的 _M_weak_this

我在A中存储了一个类(我们称它为std::vector)使用C++智能指针(因此vector签名为std::vector>)。#include#include#includeclassA:std::enable_shared_from_this{public:voiddoWork();std::shared_ptrgetSharedRef();};voidA::doWork(){std::coutA::getSharedRef(){returnshared_from_this();}classAManager{staticstd::vector>aList;public:staticv

c++ - 在 shared_from_this() 中 boost weak_ptr_cast

我正在使用boost的共享指针,并使用enable_shared_from_this来启用返回指向this的共享指针。代码如下所示:classfoo:publicboost::enable_shared_from_this{boost::shared_ptrget(){returnshared_from_this();}}为什么shared_from_this会抛出weak_ptr_cast异常? 最佳答案 如果您在堆栈上声明了foo,那么就没有其他指向foo的共享指针。例如:voidbar(){foofooby;fooby.get

c++ - boost::weak_ptr 过期后的排序顺序?

对于boost::weak_ptroperator被定义,以便它可以在关联容器中使用。我的问题是:几个weak_ptr的排序顺序是?即使其中一些对象的引用计数变为零,对象是否稳定?这不会与std::set这样的容器混淆吗??例子:usingnamespaceboost;shared_ptrsptrA1(newA);weak_ptrwptrA1=sptrA1;weak_ptrwptrA2;{//beginScope1shared_ptrsptrA2(newA);wptrA2=sptrA2;assert(wptrA1如果断言#1为真,断言#2是否始终为真?是wptrA2在范围1之前和之后处

c++ - 如何摆脱容器中的 weak_ptr

我有一个类将weak_ptr存储在一个容器中,如果weak_ptr没有过期,稍后会做一些事情:classExample{public:voidfill(std::shared_ptrthing){member.push_back(thing);}voiddosomething()const{for(constauto&i:member)if(!i.expired());//dosomething.theweak_ptrwillnotbelocked}private:std::vector>member;};如果Example是一个永远存在的对象并且经常使用fill,则vector会不断

c++ - 即使正确使用 make_shared,shared_from_this() 也会导致 std::bad_weak_ptr

我正在使用独立的Asio和C++11创建一个C++服务器应用程序,但遇到错误,这就是我寻求帮助的原因。错误在类里面worker_thread,在通话期间shared_from_this(),一个bad_weak_ptr引发异常,导致程序崩溃。布局类(class)connection_manager创建并存储std::shared_ptr类型的对象在std::vector里面容器类(class)worker_thread继承自std::enable_shared_from_this.类(class)worker_thread创建std::shared_ptr类型的对象.类(class)c

c++ - "invalid comparator": error when overloading the "<" operator

我有一个类需要排序。使用此类的vector,排序时出现“无效比较器”错误。我在我的类中重载了“遵循严格的弱排序。如本post所述.sort需要严格的弱排序。你的comparator不是一个。除其他事项外,对于严格的弱排序,comp(x,x)必须为false。这是我的代码:booloutlierScore::operator这是重载的运算符函数,它所做的本质上是尝试按离群值分数升序排序,核心距离用于打破离群值关系,以及用于打破核心距离关系的ID。StackTrace揭示了这个阶段出现的错误。templateconstexprbool_Debug_lt_pred(_Pr&&_Pred,_T

C++ weak_ptr创建性能

我已经读到创建或复制std::shared_ptr会涉及一些开销(引用计数器的原子增量等)。但是如何从中创建std::weak_ptr呢?Obj*obj=newObj();//fastObj*o=obj;//slowstd::shared_ptra(o);//slowstd::shared_ptrb(a);//slow?std::weak_ptrc(b);我希望能够获得更快的性能,但是我知道共享指针仍然必须增加弱引用计数器。那么,这仍然像将shared_ptr复制到另一个一样慢吗? 最佳答案 除了Alec's非常有趣的描述他以前的项