在传入的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
我正在广泛使用boost:shared_ptr在我的代码中。事实上,在堆上分配的大多数对象都由shared_ptr持有。.不幸的是,这意味着我无法通过this进入任何接受shared_ptr的函数.考虑这段代码:voidbar(boost::shared_ptrpFoo){...}voidFoo::someFunction(){bar(this);}这里有两个问题。首先,这不会编译,因为shared_ptr的T*构造函数是明确的。其次,如果我强制它使用bar(boost::shared_ptr(this))构建我将创建第二个指向我的对象的共享指针,该指针最终会导致双重删除。这让我想到了
我目前正在尝试学习如何使用智能指针。然而,在做一些实验时,我发现了以下情况,我找不到令人满意的解决方案:假设您有一个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
Mr.LidströmandIhadanargument:)先生。Lidström声称构造shared_ptrp(newDerived);不需要Base具有虚拟析构函数:ArmenTsirunyan:"Really?Willtheshared_ptrcleanupcorrectly?Couldyoupleaseinthiscasedemonstratehowthateffectcouldbeimplemented?"DanielLidström:"Theshared_ptrusesitsowndestructortodeletetheConcreteinstance.Thisiskno
假设我有一个类,其方法返回shared_ptr。按引用或按值返回它可能有哪些好处和坏处?两个可能的线索:早期对象销毁。如果我通过(const)引用返回shared_ptr,则引用计数器不会增加,因此我会承担在以下情况下删除对象的风险它在另一个上下文(例如另一个线程)中超出范围。这个对吗?如果环境是单线程的,是否也会出现这种情况?成本。值(value)传递当然不是免费的。是否值得尽可能避免?谢谢大家。 最佳答案 按值返回智能指针。正如您所说,如果您通过引用返回它,您将无法正确增加引用计数,这会带来在不适当的时间删除某些内容的风险。仅此
这是一个由两部分组成的问题,都是关于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是原子的;这有点好。然而,它并不适用于
您好,我今天问了一个关于Howtoinsertdifferenttypesofobjectsinthesamevectorarray的问题我在那个问题中的代码是gate*G[1000];G[0]=newANDgate();G[1]=newORgate;//gateisaclassinheritedbyANDgateandORgateclassesclassgate{...........virtualvoidRun(){//Avirtualfunction}};classANDgate:publicgate{............voidRun(){//ANDversionofRun
我听说auto_ptr在C++11中已被弃用。这是什么原因?我也想知道auto_ptr和shared_ptr的区别。 最佳答案 auto_ptr的直接替换(或者最接近的东西)是unique_ptr.就“问题”而言,它非常简单:auto_ptr在分配所有权时转移所有权。unique_ptr也转移所有权,但由于移动语义的编码和右值引用的魔力,它可以更自然地做到这一点。它也更好地“适合”标准库的其余部分(尽管公平地说,其中一些要归功于库的其余部分进行了更改以适应移动语义,而不是总是需要复制)。名称的更改也是(IMO)一个受欢迎的-auto
在试图找到shared_ptr的位置几个小时后,我现在非常沮丧。我看到的示例都没有显示包含shared_ptr标题的完整代码(和工作)。简单地说std,tr1和一点帮助都没有!我已经下载了boost,但仍然没有出现!有人可以告诉我在哪里可以找到它吗?感谢你让我发泄我的不满!编辑:我看到我的标题已更改。对于那个很抱歉。所以...这也是因为我不清楚shared_ptr是否“依赖于C++版本”-->这就是我没有说明我的环境的原因-->因此可能是我很难找到它的原因。我正在研究MSVS2008。编辑2:我不知道为什么,但我在到处寻找shared_ptr时包含了[memory]和[boost/
如果我有一个需要使用shared_ptr的函数,传递一个对它的引用不是更有效吗(以避免复制shared_ptr对象)?可能的不良副作用是什么?我设想了两种可能的情况:1)在函数内部,一个参数的拷贝,就像在ClassA::take_copy_of_sp(boost::shared_ptr&sp){...m_sp_member=sp;//Thiswillcopytheobject,incrementingrefcount...}2)在函数内部只使用参数,就像在Class::only_work_with_sp(boost::shared_ptr&sp)//Again,nocopyhere{.