草庐IT

unique_future

全部标签

c++ - 从类方法返回成员 unique_ptr

我正在尝试将std::unique_ptr类成员(尝试移动所有权)返回给调用者。以下是示例代码片段:classA{public:A():p{newint{10}}{}staticstd::unique_ptrFoo(A&a){returna.p;//ERROR:Copyconstructorgettinginvoked//returnstd::move(a.p);WORKSFINE}std::unique_ptrp;};我认为编译器(gcc-5.2.1)在这种情况下能够进行返回值优化(复制省略),而不需要通过std::move()明确意图。但事实并非如此。为什么不呢?以下代码似乎可以正

c++ - 将所有权从 std::shared_ptr 转移到 std::unique_ptr

我有一个类A,它有一个类型为std::unique_ptr:的字段classA{public:std::unique_ptrpointer;//classbody};在代码的某个地方,我使用了几个指向同一个对象的std::shared_ptr。现在我想要实现的是在我的类中将所有权转移到这个std::unique_ptr,这样如果所有shared_ptr都被销毁,我的对象将保留只要这个unique_ptr还活着。我的问题是-是否可以将所有权从std::shared_ptr转移到std::unique_ptr,如果可以,我该怎么做? 最佳答案

c++ - C++14/17 中的延迟评估 - 只是 lambdas 还是 future 等?

我刚刚读到:LazyEvaluationinC++并注意到它有点旧,而且大多数答案都是关于2011年之前的C++。现在我们有语法lambdas,它甚至可以推断返回类型,所以惰性求值似乎可以归结为只是传递它们:而不是autox=foo();你执行autounevaluted_x=[](){returnfoo();};然后评估您需要的时间/地点:autox=unevaluted_x();似乎没有更多的东西。但是,answersthere之一建议使用futures与异步启动。有人可以用C++或更抽象地说明为什么/如果future对于惰性评估工作很重要吗?似乎future很可能会被急切地评估,

c++ - 最佳实践 : How to get a unique identifier for the object

我有几个对象,需要为它们生成一个唯一标识符,该标识符在每个对象的生命周期内都不会更改/重复。基本上我想为我的对象获取/生成一个唯一的id,就像这样intid=reinterpret_cast(&obj);或intid=(int)&obj;我知道上面的代码是个坏主意,因为int可能不够大,无法存储地址等。那么从对象中获取唯一标识符的最佳实践是什么,这将是一种可移植的解决方案? 最佳答案 根据您的“独特性”要求,有多种选择:如果在一个地址空间中唯一(“在一个程序执行中”)是可以的并且您的对象保持在内存中的位置,那么指针就可以了。但是有一

c++ - 是否将 unique_lock 用于可以由 lock_guard 完成的任务较慢?

我对lock_guard存在的原因感到困惑。是吗:比unique_lock更简单的界面?比unique_lock性能更好?还有什么? 最佳答案 lock_guard可以用一个状态单元来实现:指针或对它已锁定的Mutex类型的引用。unique_lock必须保持该状态,并且知道当前是否被锁定,因为unique_lock可以有一个Mutex未锁定。这意味着它必须至少有一个额外状态的bool。lock_guard围绕获取和释放Mutex提供了一个零开销的RAII锁定/解锁包装器。基本上lock_guard意味着没有理由避免使用RAII来处

c++ - 这种使用 std::make_unique 会导致非唯一指针吗?

假设我在C++中有以下代码:#include#includestructSome{Some(int_a):a(_a){}inta;};intmain(){Somesome(5);std::unique_ptrp1=std::make_unique(some);std::unique_ptrp2=std::make_unique(some);std::coutaa据我了解,唯一指针用于保证不共享资源。但在这种情况下,p1和p2都指向同一个实例some。请公布情况。 最佳答案 它们不指向相同的资源,它们各自指向不同的拷贝。可以通过删除拷

c++ - 自动克隆 unique_ptr

std::unique_ptr有一个已删除的复制构造函数,这意味着如果你的类Foo中有一个unique_ptr作为数据成员那么您必须为Foo编写自己的复制构造函数并手动深度复制该成员(即使编译器生成的复制构造函数对所有其他成员都可以)。为了能够以多态方式进行复制,可以使用clone()方法模式。假设我们的对象有一个这样的克隆方法:classBase{virtualstd::unique_ptrclone()=0;};Foo现在看起来像这样:classFoo{public:...Foo(Fooconst&other):b(other.b->clone()),//init10moremem

C++11:GCC 4.8 静态 thread_local std::unique_ptr 未定义引用

我需要为将通过宏访问的每个线程存储一个唯一指针。我想我应该用一个单例和静态thread_localstd::unique_ptr对象来解决这个问题。这是代码的简化版本:main.cpp#include#include#include#includeusingnamespacestd;#include"yay.hpp"mutexcoutMutex;voidyay(intid){int*yayPtr=getYay();//IknowthisisbadcoutMutex.lock();couthappy;for(inti=0;i耶.hpp#ifndefBE_HAPPY#defineBE_HA

c++ - std::make_unique 导致大幅减速?

我最近开始使用C++14而不是C++11对我的C++代码库进行现代化改造。在用C++14中的std::make_unique替换一次出现的std::unique_ptr.reset(new...)后,我意识到我的测试套件(由大约30个C++测试程序组成)运行速度慢了大约50%。旧的C++11代码(快速):classFoo{public:Foo(size_tsize){array.reset(newchar[size]);}private:std::unique_ptrarray;};新的C++14代码(慢):classFoo{public:Foo(size_tsize){array=s

c++ - std::unique_ptr<T[]> API 禁止派生到基指针的转换

在ModernEffectiveC++中,“Iterm19:使用std::shared_ptr进行共享所有权资源管理。”,第133-134页,它说:std::shared_ptrsupportsderived-to-basepointerconversionsthatmakesenseforsingleobjects,butthatopenholesinthetypesystemwhenappliedtoarrays.(Forthisreason,thestd::unique_ptrAPIprohibitssuchconversions.)“类型系统中的漏洞”是什么意思?为什么std: