我了解什么是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
#includeclassData;std::unique_ptrp;//classData{};//notworkingwithoutthisintmain(){}用g++-5编译这段代码会出现这样的错误:“sizeof”对不完整类型“Data”的无效应用有人可以解释为什么如果我取消注释第4行编译会成功吗?据我所知,在第3行编译器没有关于数据类型的完整信息。我们在这一行中只有前向声明。真正的声明出现在第4行。 最佳答案 unique_ptr类型的目标类型在模板实例化时可能不完整,但在unique_ptr可能尝试处理存储的指针时必须
大家。我在C++解构中发现了一个问题。我将在下面向您展示我的代码:#include#include#includeusingnamespacestd;classB;classA{public:typedefshared_ptrPtr;shared_ptrb;intindex;A(constshared_ptr&b_,intindex_):b(b_),index(index_){}~A(){coutPtr;vectorall_a;voidaddA(){for(inti=0;i(Ptr(this),i);all_a.push_back(a);}}intindex;B(intindex_):
当我继承std::enable_shared_from_this,但是我创建了一个unique_ptr,std::enable_shared_from_this里面的weak_ptr也会被初始化吗当我通过std::move或移动构造函数“移动”到shared_ptr时?例如下面的代码会发生什么:#include#includeclassA:publicstd::enable_shared_from_this{public:std::shared_ptrgetA(){returnshared_from_this();}};intmain(){std::unique_ptru(newA()
在实现我自己的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很重要,否则它不会有测试
我有一个带有指向接口(interface)对象(我们称之为pInterface)的(非智能)指针的类,我正在构建一个也需要访问该接口(interface)的嵌套类。我将通过将指向接口(interface)的指针传递给嵌套类的构造函数来解决这个问题,如下所示:CNestedClasssomeClass(pInterface,...);但是我不确定将此指针存储在嵌套类中的最佳方式。我可以使用:1)Ascoped(orothersmart)pointer(totheoriginalobject)2)Apointertoapointer你们有什么建议,为什么?编辑:我应该澄清一下——嵌套类将需
我看到了下面的代码,#include#includeusingnamespacestd;classFred;//Forwarddeclarationtypedefauto_ptrFredPtr;classFred{public:staticFredPtrcreate(inti){returnnewFred(i);//Isthereanimplicitcastinghere?Ifnot,howcanwereturn//aFred*withreturnvalueasFredPtr?}private:Fred(inti=10):i_(i){}Fred(constFred&x):i_(x.i_
假设您有一个可以被多个线程访问的对象。临界区用于保护敏感区域。但是析构函数呢?即使我一进入析构函数就进入临界区,一旦调用了析构函数,对象就已经失效了吗?我的思路:假设我进入析构函数,我必须在临界区等待,因为其他线程仍在使用它。一旦他完成,我就可以完成销毁该对象。这有意义吗? 最佳答案 一般来说,你不应该销毁一个对象,直到你知道没有其他线程正在使用它。期间。根据您的“思路”考虑这种情况:线程A:获取对象X引用线程A:锁定对象X线程B:获取对象X引用线程B:在对象X锁上阻塞线程A:解锁对象X线程B:锁定对象X;解锁对象X;销毁对象X现在
以下是weak_ptr的2个构造函数:http://msdn.microsoft.com/en-us/library/bb982126.aspxweak_ptr(constweak_ptr&);templateweak_ptr(constweak_ptr&);实际代码(来自内存):weak_ptr(constweak_ptr&_Other){//constructweak_ptrobjectforresourcepointedtoby_Otherthis->_Resetw(_Other);}templateweak_ptr(constweak_ptr&_Other,typenameen
我的一些同事更喜欢在构造函数初始化列表中将std::auto_ptr显式初始化为0,但它会被初始化为0在它的构造函数中没有任何显式初始化。那么有什么理由这样做吗?#includeclassA{A():SomePtr(0){}private:std::auto_ptrSomePtr;}; 最佳答案 不,std::auto_ptr的默认构造函数正是这样做的,因此没有必要显式地这样做。无论如何,这是风格问题,您应该保持一致。例如,您是否会在构造函数初始化列表中显式调用成员vector的默认构造函数?作为旁注,std::auto_ptr在即