草庐IT

together_unique

全部标签

c++ - 复制构造函数中初始化列表中的 make_unique 是不使用 noexcept 说明符的良好目的吗?

我的复制构造函数旁边有一个noexcept说明符。#include#includeclassFoofinal{public:Foo()noexcept=default;Foo(constFoo&oth):impl_(std::make_unique()){}//impl_;};classFoo::Impl{...private:std::vectorsome_data;}当std::make_unique可以抛出bad_alloc时,我不确定是否应该将noexcept放在复制构造函数旁边。我们将不胜感激! 最佳答案 cpp编码指南在

c++ - 我能保证 std::unique 会保留第一个元素吗?

考虑一个排序的std::vector>基于对的第一个元素的比较。现在假设我申请:std::unique(std::begin(v),std::end(v),[](conststd::pair&x,conststd::pair&y){returnx.first==y.first;});我能保证std::unique将保留每个相等范围的第一个元素? 最佳答案 是的。Eliminatesallbutthefirstelementfromeveryconsecutivegroupofequivalentelementsfromtherang

c++ - std::unique_lock::release 的用例是什么?

在什么情况下会使用std::unique_lock的release方法?我错误地使用了release方法而不是unlock方法,我花了一段时间才明白为什么下面的代码不起作用。#include#include#include#include#includestd::mutexmtx;voidfoo(){std::unique_locklock(mtx);std::coutthreads;for(inti=0;i 最佳答案 它在thisanswer中有很好的用途其中锁定状态的所有权明确地从函数本地unique_lock转移到外部实体(通

c++ - std::unique_lock 和 std::condition_variable 如何工作

我需要弄清楚lock和condition_variable是如何工作的。在此处的-稍微修改过的代码中cplusplusreferencestd::mutexm;std::condition_variablecv;std::stringdata;boolready=false;boolprocessed=false;voidworker_thread(){//Waituntilmain()sendsdatastd::unique_locklk(m);cv.wait(lk,[]{returnready;});//afterthewait,weownthelock.std::coutlk(m

c++ - std::unique_ptr 试图引用已删除的函数

我已经使用Unity一段时间了,然后回来使用VisualStudio2015做一些C++。我遇到了这个类定义classA{public:A();virtual~A();A(constA&)=delete;A&operator=(constA&)=delete;private:…}这个类是动态分配的,如下所示:ObjPtrobj=ObjPtr(newA());哪里ObjPtr是定义的类型,看起来像:typedefstd::unique_ptrobjPtr;并将这些创建的对象添加到std::vector使用std::move.有一次,我需要遍历对象列表,如果我找到满足我条件的对象,请保留一

c++ - 为什么我不能将 std::unique_ptr 用作 "template<class> class"参数?

这段代码:#includetemplateclassPtr>classA{Ptrints;};usingB=A;产生以下错误(使用GCC6.3):a.cpp:6:28:error:type/valuemismatchatargument1intemplateparameterlistfor‘templateclassPtr>classA’usingB=A;^a.cpp:6:28:note:expectedatemplateoftype‘templateclassPtr’,got‘templateclassstd::unique_ptr’现在,我可以像这样解决这个问题:templateu

c++ - 将深拷贝构造函数添加到 std::unique_ptr<my_type>

我想存储一些std::unique_ptr进入std::vector.自my_type提供一个clone()制作my_type*的深拷贝非常简单.重点是如何扩展std::unique_ptr在添加复制构造函数和赋值运算符的同时保留其所有功能。遗产?模板特化?你能提供一个代码片段吗? 最佳答案 std::unique_ptr的目的是使其唯一,即它不应该是可复制的。这就是为什么他们将其设为只能移动的原因。它用于表示唯一所有权。如果你想做一个深拷贝然后让你的拷贝构造函数完成它的工作,这就是它的用途。std::unique_ptrptr1{

c++ - unique_ptr 删除的 vector ?

我有一个我无法弄清楚的段错误问题。它来self正在开发的小型游戏引擎的EntityManager。我可以添加ShipEntity,Ship可以添加1个BulletEntity,但如果我尝试添加超过1个Bullet,它会出现段错误。在过去的一天里,我一直在努力解决这个问题。以下是实际代码的一小段摘录。#include#includestructEntityManager;structEntity{Entity(EntityManager*manager):manager(manager){}virtual~Entity(){}virtualvoidupdate()=0;EntityMan

c++ - 返回一个 unique_ptr<T> 。概念澄清

在阅读有关boostunique_ptr的内容时,在这link上它指出不能复制这样的指针,据我所知,但是它指出可以从函数返回这样的指针。这在我脑海中提出了一个问题,当从函数返回某些东西(不是作为引用或指针)时,复制构造函数被调用。这是否意味着uniqueptr不与赋值运算符一起工作而与复制构造函数一起工作(这样一次只有ptr指向一个对象)而且它的开销是否比boostashared_ptr少?我正在使用VS2010 最佳答案 whensomethingisreturnedfromafunction(notasareferenceora

c++ - 如何将 unique_ptr 移动到原始指针?

我有一个函数,用于分配给定大小的缓冲区。缓冲区将在返回前预处理/填充一些数据。此预处理可能会返回false以表示此缓冲区未正确处理。所以我想在这个缓冲区上应用RAII以避免在没有delete[]的情况下提前返回通常我使用unique_ptr帮助我自动释放本地分配的对象。在这种情况下,我需要返回这个分配的对象(由unique_ptr拥有)并将所有权转移给调用者。但是编译器提示我无法转换unique_ptr至T*而我std::moveunique_ptr.看起来像unique_ptr只能移动到另一个unique_ptr而不是原始指针。有什么方法可以从unique_ptr转移所有权吗?到ra