草庐IT

intrusive_ptr

全部标签

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++ - 不推荐使用 auto_ptr 吗?

在传入的C++标准中是否会弃用auto_ptr?是否应该使用unique_ptr而不是shared_ptr进行所有权转移?如果unique_ptr不在标准中,我是否需要使用shared_ptr来代替? 最佳答案 更新:这个答案写于2010年,正如预期的那样,std::auto_ptr已被弃用。该建议完全有效。在C++0x中,std::auto_ptr将被弃用,取而代之的是std::unique_ptr。智能指针的选择将取决于您的用例和您的要求,std::unique_ptr具有可在容器内使用的单一所有权的移动语义(使用移动语义)和s

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

c++ - 为什么不推荐使用 auto_ptr?

我听说auto_ptr在C++11中已被弃用。这是什么原因?我也想知道auto_ptr和shared_ptr的区别。 最佳答案 auto_ptr的直接替换(或者最接近的东西)是unique_ptr.就“问题”而言,它非常简单:auto_ptr在分配所有权时转移所有权。unique_ptr也转移所有权,但由于移动语义的编码和右值引用的魔力,它可以更自然地做到这一点。它也更好地“适合”标准库的其余部分(尽管公平地说,其中一些要归功于库的其余部分进行了更改以适应移动语义,而不是总是需要复制)。名称的更改也是(IMO)一个受欢迎的-auto

c++ - 数据结构为 "intrusive"意味着什么?

我见过intrusive一词用来描述列表和堆栈等数据结构,但它是什么意思?您能否给出一个侵入式数据结构的代码示例,以及它与非侵入式数据结构的区别?另外,为什么要使其具有侵入性(或非侵入性)?有什么好处?有什么缺点? 最佳答案 侵入式数据结构是一种需要它打算存储的元素的帮助才能存储它们的结构。让我改写一下。当您将某些东西放入该数据结构中时,该“某物”会以某种方式意识到它在该数据结构中的事实。将元素添加到数据结构中会更改元素。例如,您可以构建一个非侵入式二叉树,其中每个节点都有一个对左右子树的引用,以及对该节点元素值的引用。或者,您可以