草庐IT

unique_future

全部标签

c++ - 为什么 unique_ptr 实例化编译为比原始指针更大的二进制文件?

我一直认为std::unique_ptr与使用原始指针相比没有开销。但是,编译如下代码#includevoidraw_pointer(){int*p=newint[100];delete[]p;}voidsmart_pointer(){autop=std::make_unique(100);}使用g++-std=c++14-O3生成以下程序集:raw_pointer():subrsp,8movedi,400calloperatornew[](unsignedlong)addrsp,8movrdi,raxjmpoperatordelete[](void*)smart_pointer():

c++ - 等待多个 future ?

我想运行相同类型的任务(工作线程),但一次不超过一定数量的任务。当一个任务完成时,它的结果是一个新任务的输入,然后就可以开始了。有什么好的方法可以在C++11中使用async/future范例来实现这一点吗?乍一看,它看起来很简单,您只需生成多个任务:std::futureresult=std::async(...);然后,运行result.get()以获取任务的异步结果。然而,这里的问题是,future的对象必须存储在某种队列中,并一个一个地等待。不过,可以一遍又一遍地迭代future的对象,检查它们是否准备好了,但由于不必要的CPU负载,这是不希望的。是否有可能以某种方式等待给定集

c++ - 等待多个 future ?

我想运行相同类型的任务(工作线程),但一次不超过一定数量的任务。当一个任务完成时,它的结果是一个新任务的输入,然后就可以开始了。有什么好的方法可以在C++11中使用async/future范例来实现这一点吗?乍一看,它看起来很简单,您只需生成多个任务:std::futureresult=std::async(...);然后,运行result.get()以获取任务的异步结果。然而,这里的问题是,future的对象必须存储在某种队列中,并一个一个地等待。不过,可以一遍又一遍地迭代future的对象,检查它们是否准备好了,但由于不必要的CPU负载,这是不希望的。是否有可能以某种方式等待给定集

c++ - 那么在 STL 集合中可以安全地使用 unique_ptr 吗?

我对unique_ptr和右值移动哲学感到困惑。假设我们有两个集合:std::vector>autoCollection;std::vector>uniqueCollection;现在我预计以下操作会失败,因为不知道算法在内部做什么,并且可能会制作内部数据透视拷贝等,从而剥夺auto_ptr的所有权:std::sort(autoCollection.begin(),autoCollection.end());我明白了。并且编译器正确地不允许这种情况发生。然后我这样做:std::sort(uniqueCollection.begin(),uniqueCollection.end());然

c++ - 那么在 STL 集合中可以安全地使用 unique_ptr 吗?

我对unique_ptr和右值移动哲学感到困惑。假设我们有两个集合:std::vector>autoCollection;std::vector>uniqueCollection;现在我预计以下操作会失败,因为不知道算法在内部做什么,并且可能会制作内部数据透视拷贝等,从而剥夺auto_ptr的所有权:std::sort(autoCollection.begin(),autoCollection.end());我明白了。并且编译器正确地不允许这种情况发生。然后我这样做:std::sort(uniqueCollection.begin(),uniqueCollection.end());然

c++ - 从队列中删除 unique_ptr

我正在尝试弄清楚如何/是否可以在queue中使用unique_ptr。//createqueuestd::queue>q;//addelementstd::unique_ptrp(newint{123});q.push(std::move(p));//trytograbtheelementautop2=foo_queue.front();q.pop();我明白为什么上面的代码不起作用。由于front和pop是2个独立的步骤,因此无法移动元素。有没有办法做到这一点? 最佳答案 你应该明确地说你想要移动指针离开队列。像这样:std::u

c++ - 从队列中删除 unique_ptr

我正在尝试弄清楚如何/是否可以在queue中使用unique_ptr。//createqueuestd::queue>q;//addelementstd::unique_ptrp(newint{123});q.push(std::move(p));//trytograbtheelementautop2=foo_queue.front();q.pop();我明白为什么上面的代码不起作用。由于front和pop是2个独立的步骤,因此无法移动元素。有没有办法做到这一点? 最佳答案 你应该明确地说你想要移动指针离开队列。像这样:std::u

c++ - 如何将 unique_ptr 用于 pimpl?

这是我尝试将unique_ptr用于pimpl时所看到的简化。我选择unique_ptr是因为我真的希望类拥有指针-我希望pimpl指针和类的生命周期相同。不管怎样,这是标题:#ifndefHELP#defineHELP1#includeclassHelp{public:Help(intii);~Help()=default;private:classImpl;std::unique_ptr_M_impl;};#endif//HELP这里是来源:#include"Help.h"classHelp::Impl{public:Impl(intii):_M_i{ii}{}private:in

c++ - 如何将 unique_ptr 用于 pimpl?

这是我尝试将unique_ptr用于pimpl时所看到的简化。我选择unique_ptr是因为我真的希望类拥有指针-我希望pimpl指针和类的生命周期相同。不管怎样,这是标题:#ifndefHELP#defineHELP1#includeclassHelp{public:Help(intii);~Help()=default;private:classImpl;std::unique_ptr_M_impl;};#endif//HELP这里是来源:#include"Help.h"classHelp::Impl{public:Impl(intii):_M_i{ii}{}private:in

php - 对象的array_unique?

有没有类似array_unique对象的方法?我有一堆包含我合并的“角色”对象的数组,然后我想取出重复项:) 最佳答案 array_unique使用SORT_REGULAR处理对象数组:classMyClass{public$prop;}$foo=newMyClass();$foo->prop='test1';$bar=$foo;$bam=newMyClass();$bam->prop='test2';$test=array($foo,$bar,$bam);print_r(array_unique($test,SORT_REGULA