compare_exchange_weak
全部标签 出于遗留原因,我需要使用侵入式指针,因为我需要能够将原始指针转换为智能指针。但是我注意到没有用于boost的弱侵入性指针。我确实在boost线程列表中找到了有关它的讨论,但没有具体内容。有人知道弱侵入指针的线程安全实现吗?谢谢丰富 最佳答案 这没有任何意义。详细说明:weak_ptr指向与shared_ptr相同的counter对象实例。当shared_ptr超出范围时,counter的实例保持不变(有效计数为0),这允许weak_ptr实例检查它们是否有效地指向一个已释放的对象。使用侵入式计数,计数器集成在对象中。当计数达到0时,
我想创建一些Timer类,它每N秒打印一次“文本”,其中N将在构造函数中初始化。#include#include#include#includeclassTimer:publicboost::enable_shared_from_this{public:Timer(constdoubleinterval):interval_sec(interval){io_service_=newboost::asio::io_service;timer_=newboost::asio::deadline_timer(*io_service_);start();io_service_->run();}
如果您想知道一个字符串是否以另一个字符串开头,您将如何在C++/STL中做到这一点?Java中有String.startsWith,Python也有string.startwith,STL没有直接的方法。相反,有std::string::find和std::string::compare。直到现在我都使用了这两种方法,主要取决于我现在的心情:if(str1.compare(0,str2.length(),str2)==0)do_something();if(str1.find(str2)==0)do_something();当然,你也可以做到str.substr(0,str2.leng
我读过weak_pointers可以用来打破循环引用。考虑下面的循环引用示例structA{boost::shared_ptrshrd_ptr;};boost::shared_ptrptr_A(boost::make_shared());boost::shared_ptrptr_b(boost::make_shared());ptr_A->shrd_ptr=ptr_b;ptr_b->shrd_ptr=ptr_A;以上是循环引用的例子,我想知道如何破解上面使用weak_ptr的循环引用?更新:根据收到的建议,我提出了以下建议:structA{boost::weak_ptrwk_ptr;}
我正在尝试使用std::shared_ptr和std::weak_ptr来处理对象。场景是这样的:我有channel类的对象,它派生自抽象类abstract::channel(带有纯虚函数)。我有一个容器channelContainer(std::vector)包含到channel的共享指针(std::shared_ptr)对象。现在,我有一个deque(std::deque)包含指向channelContainer(std::weak_ptr)/。让我们将此双端队列命名为freeChannelQueue。可以这么说:std::vector>channelContainer;std::
我正在尝试从observerpattern编写一个安全的Subject类.我想知道使用weak_ptr是否是存储IObserver实例的最佳方式:IObserver实例在释放后无法使用。Subject类不保留应该释放的IObserver引用(lapsedlistenerproblem)。Subject类必须是线程安全的。很遗憾,我们的编码标准规定我们不允许使用boost。我想我前世是个坏人。幸运的是,我可以使用C++11(VisualStudio2012附带的)。这是一个示例Observer类。//Observerinterfacethatsupportsnotify()methodc
有没有办法区分已分配(可能已过期)的weak_ptr和未分配的。weak_ptrw1;weak_ptrw2=...;我了解以下针对未转让或到期的检查,但是否有(更便宜的?)仅针对未转让的检查?if(!w.lock()){/*eithernotassignedorexpired*/} 最佳答案 您可以使用两次调用owner_before来检查默认构造的(空)弱指针是否相等:templateboolis_uninitialized(std::weak_ptrconst&weak){usingwt=std::weak_ptr;return
我有一个问题:假设有两个std::strings和我想比较它们,可以选择使用compare()string的功能类,但我也注意到可以使用简单的!=运算符(即使我不包含库,这两种情况都是可能的)。谁能解释为什么compare()如果可以使用简单的运算符进行比较,函数是否存在?顺便说一句,我使用Code::Blocks13.12这是我的代码示例:#include#includeusingstd::cin;usingstd::cout;usingstd::endl;usingstd::string;usingstd::getline;intmain(){stringtemp1,temp2;c
有没有办法std::bind到std::weak_ptr?我想存储一个“弱函数”回调,当被调用者被销毁时会自动“断开”。我知道如何使用shared_ptr创建std::function:std::functionMyClass::GetCallback(){returnstd::function(std::bind(&MyClass::CallbackFunc,shared_from_this()));}然而,返回的std::function让我的对象永远活着。所以我想将它绑定(bind)到weak_ptr:std::functionMyClass::GetCallback(){std
与使用原始指针的类似(但不限于)一些高级技术相比,每个智能指针的等效用途是什么?我的理解很少,但从我能收集到的情况来看:原始指针:只有在你真的、真的、真的、真的知道你在做什么并且在界面后面小心地隐藏了用法的情况下才使用。std::auto_ptr:已过时永不使用。std::unique_ptr:在分配时转移所有权的单例指针。std::shared_ptr:引用计数指针,在分配时不会转移所有权,但会增加其引用计数。当所有引用离开作用域或显式std::shared_ptr::reset标的deallocator被调用。std::weak_ptr:子类型std::shared_ptr它不会增