在我当前的项目中,我非常广泛地使用boost::shared_ptr。最近我的队友也开始使用weak_ptr。我不知道该使用哪一个以及何时使用。除此之外,如果我想将weak_ptr转换为shared_ptr应该怎么做。锁定weak_ptr以创建shared_ptr会影响我在其他线程中的代码吗? 最佳答案 总的来说和总结,强指针保证它们自己的有效性。例如,在以下情况下使用它们:您拥有被指向的对象;你创建它并销毁它如果对象不存在,您没有定义的行为您需要强制该对象存在。弱指针保证知道它们自己的有效性。例如,在以下情况下使用它们:您可以访问
在我当前的项目中,我非常广泛地使用boost::shared_ptr。最近我的队友也开始使用weak_ptr。我不知道该使用哪一个以及何时使用。除此之外,如果我想将weak_ptr转换为shared_ptr应该怎么做。锁定weak_ptr以创建shared_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
我正在尝试弄清楚如何/是否可以在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
使用make_shared()有什么缺点吗?而不是使用shared_ptr(newT).Boostdocumentation状态Therehavebeenrepeatedrequestsfromusersforafactoryfunctionthatcreatesanobjectofagiventypeandreturnsashared_ptrtoit.Besidesconvenienceandstyle,suchafunctionisalsoexceptionsafeandconsiderablyfasterbecauseitcanuseasingleallocationforbot
使用make_shared()有什么缺点吗?而不是使用shared_ptr(newT).Boostdocumentation状态Therehavebeenrepeatedrequestsfromusersforafactoryfunctionthatcreatesanobjectofagiventypeandreturnsashared_ptrtoit.Besidesconvenienceandstyle,suchafunctionisalsoexceptionsafeandconsiderablyfasterbecauseitcanuseasingleallocationforbot
这是我尝试将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
这是我尝试将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
longint(据我了解是long的同义词)总是4个字节是否总是正确的?我可以依赖它吗?如果不是,那么对于基于POSIX的操作系统来说是不是真的? 最佳答案 除了char之外,标准没有说明任何整数类型的确切大小。通常,long在32位系统上为32位,在64位系统上为64位。然而,该标准确实指定了最小大小。来自CStandard的第5.2.4.2.1节:1Thevaluesgivenbelowshallbereplacedbyconstantexpressionssuitableforusein#ifpreprocessingdire
longint(据我了解是long的同义词)总是4个字节是否总是正确的?我可以依赖它吗?如果不是,那么对于基于POSIX的操作系统来说是不是真的? 最佳答案 除了char之外,标准没有说明任何整数类型的确切大小。通常,long在32位系统上为32位,在64位系统上为64位。然而,该标准确实指定了最小大小。来自CStandard的第5.2.4.2.1节:1Thevaluesgivenbelowshallbereplacedbyconstantexpressionssuitableforusein#ifpreprocessingdire