我在使用GCC4.8.4的Ubuntu14.04上,我的代码类似于以下内容:std::shared_ptrmy_shared_object=setelsewhere...MyFunction(*my_shared_object);MyFunction的签名如下所示:voidMyFunction(constMyClass&my_object)可以找到完整的代码here但是,我发现my_object实际上超出了MyFunction上下文中的范围。我的想法是my_shared_object只有在超出范围后才会释放其内容,这意味着在MyFunction返回之后。我不确定我是否误解了std::s
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭6年前。Improvethisquestion我有一个std::unique_ptr我想添加到std::vector>.std::unique_ptrderivedObject;std::vector>vec;vec.push_back(derivedObject)//Invalidarguments
我正在转向智能指针,并努力确保正确使用它们。有很多问题涵盖了何时使用每个问题,但我找不到专门关于getter的问题。我有一个拥有指针的类,我希望其他类能够访问该指针(逐步重构遗留代码)。我想给这个类一个unique_ptr因为它只会拥有那个对象,但它们不能被复制。我应该返回对unique_ptr的引用,还是只使用shared_ptr?classB{public:doAction(){};};classA{private:std::unqiue_ptrpointer;public:std::unique_ptr&GetPointer(){returnpointer;}};a.GetPoi
我想了解当将shared_ptr分配给另一个时,shared_ptr中托管对象的引用计数会受到怎样的影响。我在C++primer,5thedition中看到以下声明:Forexample,thecounterassociatedwithashared_ptrisincrementedwhen...weuseitastheright-handoperandofanassignment...Thecounterisdecrementedwhenweassignanewvaluetotheshared_ptr...举个例子:autop=make_shared(42);//objecttowh
我有一个带有数据成员的容器类。std::vector>Functions;我想在我的复制构造函数中做一个深拷贝,我怎样才能做一个std::unique_ptr的深拷贝。 最佳答案 std::vector>copiedFunctions;std::for_each(Functions.begin(),Functions.end(),[&](std::unique_ptrf){copiedFunctions.push_back(std::make_unique(*f));}));这意味着Sum_Function当然有一个复制构造函数。
有没有办法首先用nullptr初始化shared_ptr并在一段时间后将指向类的指针赋值给它?//pseudocodestd::shared_ptrptr(nullptr);//andlaterptr->assign(newMyClass); 最佳答案 你在寻找ptr.reset(newMyClass)吗? 关于c++-分配给shared_ptr,有没有办法做到这一点?,我们在StackOverflow上找到一个类似的问题: https://stackover
问题我有一个模板容器MyContainer>它有一个std::deque和一个std::vector成员(member)。内部方法,send_to_purgatory_if(predicate),我想查看m_taskdq中的所有项目并从m_taskdq移动项目至m_purgatory,如果谓词的计算结果为真。问题我有两个问题正在努力解决:我的迭代器it如果我从循环内从m_taskdq中删除项目,则会被丢弃我很担心std::unique_ptr的状态如果我分两步进行移动(问题第1行和第2行-通过第2行,我认为std::unique_ptr指向的it未定义?)我应该如何修复此代码?temp
我正在玩fluentinterface模式。首先,我写了这样的东西:classC{public:C(){}C*inParam1(intarg1){param1=arg1;returnthis;}C*inParam2(intarg2){param2=arg2;returnthis;}private:intparam1;intparam2;}然后我尝试使用std::unique_ptr,但后来我意识到我不知道如何沿着链“移动”指针(this)。我试过类似的东西:returnstd::move(this);那当然不行。我该怎么做?这样做有什么问题吗?为了回复诸如“不要使用指针”之类的评论:(
我试图理解c++11中的unique_ptr、shared_ptr和weak_ptr。我听说weak_ptr对于缓存和中断循环等事情会很好。我听说它们与shared_ptrs配合得很好。但是在这方面,shared_ptrs和unique_ptrs有什么区别呢?为什么weak_ptr只能与一个一起使用而不能与另一个一起使用?为什么我不想对其他人拥有的东西进行弱引用? 最佳答案 weak_ptr在技术上是一种卡在管理某些共享对象的一组shared_ptr的引用计数器上的方法。当最后一个shared_ptr被销毁时,对象被销毁,但只要有w
正如BjarneStroustrup的“C++之旅”中所述,作为一种已知的C++14实践,人们应该避免在代码中使用裸露的new和delete。标准库提供std::make_shared和std::make_unique用于创建智能指针以立即将分配的对象存储在其中。但是,不能将这些例程用于非标准智能指针,例如在Qt中。Qt有自己的内存管理模型(带父对象),但也提供智能指针类,如QSharedPointer和QPointer(尽管后者实际上不是拥有指针)。我的问题是:创建std::make_shared的Qt类似物不是很方便吗?像这样,创建QSharedPtr:namespaceQt{te