草庐IT

unique_future

全部标签

c++ - 通过 std::unique_ptr 扩展变量的生命周期

使用C++11unique_ptr,对象的生命周期似乎被延长到其通常范围之外,如下面(相当人为的)示例所示:#include#includeusingnamespacestd;intmain(){unique_ptruPtr(nullptr);{charc='X';cout输出:c=Xc=Y通常在作用域结束时释放的字符c一直存在到程序结束。第二个输出是“Y”,表明unique_ptr不只是简单地复制它的值。是否建议以某种方式延长变量的生命周期?这是否安全,或者它是否具有与引用相同的危险? 最佳答案 WiththeC++11uniqu

C++11 通过原始指针或引用获取 unique_ptr 的所有权?

编辑我想下面的代码会假设我有一个addChild()的重载版本,它接受一个已经包装在unique_ptr中的Sprite,在那里取得所有权就可以了。只是想我会在其他人之前提到这一点。:)。经过漫长的一天,我在这里编写了所有代码,因此请将其视为伪代码质量,仅用于演示手头的问题。原始问题我正在编写一个框架,其中有一个显示列表、parent/child等。我认为使用unique_ptrforexample是这里的方法,因为当您将子项添加到父显示对象时,父项现在成为该子项的唯一所有者是合乎逻辑的。但是,将有可用的方法,例如getChildAt(index)和getChildByName等,我认

c++ - 为什么我们应该将 `std::unique_lock` 放在本地范围内?

基于C++EquivalenttoJava'sBlockingQueuevoidpush(Tconst&value){//originalversion{std::unique_locklock(this->d_mutex);d_queue.push_front(value);}this->d_condition.notify_one();}voidpush(Tconst&value){//myquestion//{//commentoutthescopestd::unique_locklock(this->d_mutex);d_queue.push_front(value);//}/

c++ - 为什么 unique_ptr<T>::~unique_ptr 需要 T 的定义?

如果我有一个“酒吧”类://bar.hclassBar{public:Bar(){}};我转发声明与另一个类“Foo”中的std::unique_ptr一起使用://foo.h#includeclassBar;classFoo{public:Foo();private:std::unique_ptrbar_;};我在Foo的实现文件中包含了它的定义://foo.cpp#include"foo.h"#include"bar.h"Foo::Foo():bar_(newBar){}我收到编译时错误“‘sizeof’对不完整类型‘Bar’的无效应用”。我从here了解到和here为了解决这个问

c++ - 如何将 unique_ptr 移出 vector<unique_ptr<Foo>>?

我想搬一个unique_ptr从一个vector>.考虑我的代码:#include#include#includeusingnamespacestd;classFoo{public:intx;Foo(intx):x(x){};~Foo(){cout>();foos.push_back(unique_ptr(newFoo(100)));foos.push_back(unique_ptr(newFoo(101)));foos.push_back(unique_ptr(newFoo(102)));//Printallcoutxxx我预计它会产生:Vectorsize:3100101102Re

c++ - 在递归数据结构中 move unique_ptr<T> 数组

尝试编译以下代码会导致以下编译错误:errorC2280:'std::unique_ptr>::unique_ptr(conststd::unique_ptr>&)':attemptingtoreferenceadeletedfunction我的理解是数组“m_children”应该是可move的,因为unique_ptr指向的类型定义了move构造函数。除非这是由类的递归性质或我忽略的某些move语义元素引起的错误?#include#include#includeclassOctreeNode{public:OctreeNode(){};OctreeNode(OctreeNode&&

c++ - 将 make_unique<X> 分配给 shared_ptr<X>

我(错误地)在我的程序中进行了以下分配:std::shared_ptrm_program;//inclassm_program=std::make_unique();//inmethod当我发现它时,我首先想知道为什么它甚至可以编译。事实证明,shared_ptr对unique_ptr对象有一个特殊的移动赋值运算符。我的问题是,这样做是否总是安全的,或者它有任何影响吗?(对于代码执行来说是安全的;对于代码审查来说显然是不安全的……) 最佳答案 从某种意义上说,这样做是“安全的”,您不会遇到任何重复删除或其他问题。这样做是不行的,因为

C++ 什么是 std::shared_future 和 std::promise

我了解什么是std::future但我不了解何时以及如何使用std::shared_future和std::promise,而且我在网上找不到很好的解释。我会很感激一些帮助我解决这个问题。顺便说一句,这里的例子不是很清楚http://en.cppreference.com/w/cpp/thread/shared_future 最佳答案 std::shared_future当您需要拥有std::future的多个有效拷贝时,并且可能是上述std::future的多个消费者.您可以移动std::future进入std::shared_f

c++ - 使用尚未定义的参数的 unique_ptr 实例化不会导致错误

#includeclassData;std::unique_ptrp;//classData{};//notworkingwithoutthisintmain(){}用g++-5编译这段代码会出现这样的错误:“sizeof”对不完整类型“Data”的无效应用有人可以解释为什么如果我取消注释第4行编译会成功吗?据我所知,在第3行编译器没有关于数据类型的完整信息。我们在这一行中只有前向声明。真正的声明出现在第4行。 最佳答案 unique_ptr类型的目标类型在模板实例化时可能不完整,但在unique_ptr可能尝试处理存储的指针时必须

c++ - std::unique_ptr 是否在其析构函数中将其基础指针设置为 nullptr?

在实现我自己的unique_ptr时(只是为了好玩),我发现它不能通过这个testfile来自libstdcxx:structA;structB{std::unique_ptra;};structA{B*b;~A(){VERIFY(b->a!=nullptr);}};voidtest01(){Bb;b.a.reset(newA);b.a->b=&b;}gccpasses愉快地测试这个文件(当然,这个文件来自libstdcxx),而clangfails对于VERIFY部分。问题:它是依赖于实现还是未定义的行为?我想这个后置条件(b->a!=nullptr)对gcc很重要,否则它不会有测试