草庐IT

libgnuSTL_shared

全部标签

c++ - 何时使用 shared_ptr 以及何时使用原始指针?

classB;classA{public:A():m_b(newB()){}shared_ptrGimmeB(){returnm_b;}private:shared_ptrm_b;};假设B是一个在语义上不应该存在于A生命周期之外的类,即B本身存在绝对没有意义。应GimmeB返回shared_ptr或B*?一般来说,完全避免在C++代码中使用原始指针代替智能指针是一种好习惯吗?我认为shared_ptr仅应在明确转让或共享所有权时使用,我认为在函数分配一些内存、用一些数据填充它并返回它并且调用者和被调用者之间存在理解的情况之外,这是非常罕见的前者现在对这些数据“负责”。

c++ - C++11 unique_ptr 和 shared_ptr 是否能够转换为彼此的类型?

C++11标准库是否提供任何实用程序来将std::shared_ptr转换为std::unique_ptr,反之亦然?这样操作安全吗? 最佳答案 std::unique_ptristheC++11waytoexpressexclusiveownership,butoneofitsmostattractivefeaturesisthatiteasilyandefficientlyconvertstoastd::shared_ptr.Thisisakeypartofwhystd::unique_ptrissowellsuitedasaf

c++ - 带有 boost::shared_ptr 的 static_cast?

static_cast与boost::shared_ptr的等价物是什么?也就是说,我要如何重写下面的内容Base*b=newDerived();Derived*d=static_cast(b);当使用shared_ptr时?boost::shared_ptrb(newDerived());boost::shared_ptrd=??? 最佳答案 使用boost::static_pointer_cast:boost::shared_ptrb(newDerived());boost::shared_ptrd=boost::static_

c++ - C++ 中的空 std::shared_ptr 和空 std::shared_ptr 有什么区别?

cplusplus.comshared_ptrpageemptystd::shared_ptr和nullshared_ptr之间存在区别。cppreference.compage没有明确指出区别,但在其对std::shared_ptr行为的描述中使用了“空”和与nullptr的比较。空shared_ptr和空shared_ptr有区别吗?这种混合行为指针有什么用例吗?非空nullshared_ptr是否有意义?在正常使用中(即,如果您没有明确构造一个)是否会出现最终得到一个空但非空的shared_ptr的情况?如果您使用的是Boost版本而不是C++11版本,这些答案是否会发生变化?

c++ - 为此获得 boost::shared_ptr

我正在广泛使用boost:shared_ptr在我的代码中。事实上,在堆上分配的大多数对象都由shared_ptr持有。.不幸的是,这意味着我无法通过this进入任何接受shared_ptr的函数.考虑这段代码:voidbar(boost::shared_ptrpFoo){...}voidFoo::someFunction(){bar(this);}这里有两个问题。首先,这不会编译,因为shared_ptr的T*构造函数是明确的。其次,如果我强制它使用bar(boost::shared_ptr(this))构建我将创建第二个指向我的对象的共享指针,该指针最终会导致双重删除。这让我想到了

c++ - std::shared_ptr 这个

我目前正在尝试学习如何使用智能指针。然而,在做一些实验时,我发现了以下情况,我找不到令人满意的解决方案:假设您有一个A类对象是B类对象(子对象)的父对象,但两者应该彼此认识:classA;classB;classA{public:voidaddChild(std::shared_ptrchild){children->push_back(child);//Howtodopassthepointercorrectly?//child->setParent(this);//wrong//^^^^}private:std::list>children;};classB{public:setP

c++ - shared_ptr 魔法 :)

Mr.LidströmandIhadanargument:)先生。Lidström声称构造shared_ptrp(newDerived);不需要Base具有虚拟析构函数:ArmenTsirunyan:"Really?Willtheshared_ptrcleanupcorrectly?Couldyoupleaseinthiscasedemonstratehowthateffectcouldbeimplemented?"DanielLidström:"Theshared_ptrusesitsowndestructortodeletetheConcreteinstance.Thisiskno

c++ - 如何通过引用或值返回智能指针(shared_ptr)?

假设我有一个类,其方法返回shared_ptr。按引用或按值返回它可能有哪些好处和坏处?两个可能的线索:早期对象销毁。如果我通过(const)引用返回shared_ptr,则引用计数器不会增加,因此我会承担在以下情况下删除对象的风险它在另一个上下文(例如另一个线程)中超出范围。这个对吗?如果环境是单线程的,是否也会出现这种情况?成本。值(value)传递当然不是免费的。是否值得尽可能避免?谢谢大家。 最佳答案 按值返回智能指针。正如您所说,如果您通过引用返回它,您将无法正确增加引用计数,这会带来在不适当的时间删除某些内容的风险。仅此

c++ - 是否有 std::shared_ptr 的非原子等价物?为什么 <memory> 中没有一个?

这是一个由两部分组成的问题,都是关于std::shared_ptr的原子性的。:1.据我所知,std::shared_ptr是中唯一的智能指针那是原子的。我想知道是否有std::shared_ptr的非原子版本可用(我在中看不到任何内容,因此我也愿意接受标准之外的建议,例如Boost中的建议)。我知道boost::shared_ptr也是原子的(如果BOOST_SP_DISABLE_THREADS未定义),但也许还有另一种选择?我正在寻找与std::shared_ptr具有相同语义的东西,但没有原子性。2.我明白为什么std::shared_ptr是原子的;这有点好。然而,它并不适用于

c++ - 使用 shared_ptr 的示例?

您好,我今天问了一个关于Howtoinsertdifferenttypesofobjectsinthesamevectorarray的问题我在那个问题中的代码是gate*G[1000];G[0]=newANDgate();G[1]=newORgate;//gateisaclassinheritedbyANDgateandORgateclassesclassgate{...........virtualvoidRun(){//Avirtualfunction}};classANDgate:publicgate{............voidRun(){//ANDversionofRun