有没有办法首先用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
在这一行中:autoa="HelloWorld";a的确切类型是什么?我猜是char[]或constchar*const但我不确定。 最佳答案 N42962.13.5/8OrdinarystringliteralsandUTF-8stringliteralsarealsoreferredtoasnarrowstringliterals.Anarrowstringliteralhastype“arrayofnconstchar”,wherenisthesizeofthestringasdefinedbelow,andhasstatic
在C++11中,如果我尝试这样做:intx=5;int&&y=x;它将无法编译,并出现一个错误,提示右值引用无法绑定(bind)到左值。但是如果我这样做:intx=5;auto&&y=x;它编译没有错误。为什么会这样?我试图获取y的类型,但typeid()带走了引用属性。auto&&是否根据分配的内容自动折叠为&或&&? 最佳答案 在第一种情况下int&&y,变量y只能绑定(bind)到rvalue,x是不是。在第二种情况下auto&&y但是,变量y可以绑定(bind)到任何东西,因为无论如何都会推导出y的类型—并且将相应地应用引用
我已经实现了一个功能,在这个功能中,身份是交给我的,不受我的控制。它返回std::shared_ptr.在函数中,我分配了任意数量的内存,并通过shared_ptr返回对它的访问。我的内存分配是用newunsignedchar[123]完成的.问题是valgrind检测到新变体和删除变体的使用不匹配。当我使用new[](unsigned)为了分配内存,shared_ptr析构函数使用delete(void*)释放它,每当您使用“不正确”的分配器进行分配时,valgrind都会发出警告。更实际地说,我写了这个测试用例来说明我的意思:TEST(Example,Test1){unsigned
在大学后期,我有一门关于编译器的类(class)。我们为C的一个子集创建了一个编译器。我一直想知道在C++中如何将pass-by-ref函数调用编译成汇编。据我所知,传递值函数调用遵循以下过程:存储PP的地址将参数压入堆栈执行函数调用在函数中,从栈中弹出参数按引用传递有什么不同?(intvoid(int&);)编辑:我可能听起来完全迷失了,但如果你能帮助我,我将非常感激。大家的回答基本都是传地址,不传值。我明白这基本上就是传递指针的意思。那么,这两个函数的行为为何不同呢?:structA{intx;A(intv){x=v;}};intbyRef(A&v){v=A(3);return0;
我正在考虑使用boost::weak_ptr来实现一个对象池,这样当没有人使用其中一个对象时,它们就会被回收。不过,我担心的是,它是一个多线程环境,而且似乎在指向超出范围的对象的最后一个shared_ptr与从weak_ptr构造的新shared_ptr之间存在竞争条件。通常,您会使用锁或其他东西来保护此类操作;然而,这里的重点是您不知道shared_ptr何时可能超出范围。我对boost::shared_ptr和boost::weak_ptr有什么误解吗?如果没有,有人对做什么有什么好的建议吗?谢谢。安德鲁 最佳答案 要使用wea