草庐IT

locking_ptr

全部标签

c++ - 我应该在移动构造函数中 std::move 一个 shared_ptr 吗?

考虑:#include#include#include#include#include#includeusingnamespacestd;classGizmo{public:Gizmo():foo_(shared_ptr(newstring("bar"))){};Gizmo(Gizmo&&rhs);//ImplementedBelowprivate:shared_ptrfoo_;};/*//doesn'tusestd::moveGizmo::Gizmo(Gizmo&&rhs):foo_(rhs.foo_){}*///Doesusestd::moveGizmo::Gizmo(Gizmo&

c++ - 可以将过期的weak_ptr 与未初始化的weak_ptr 区分开来吗?

例如:std::weak_ptrwp1(std::make_shared());std::weak_ptrwp2;assert(PointsToValidOrExpiredObject(wp1));assert(!PointsToValidOrExpiredObject(wp2));这样的功能可能吗?用例:类的构造函数采用std::weak_ptr作为依赖。传递过期对象是可以的(可能在某些工作流中发生),但传递null意味着程序员忘记了一些东西。作为构造函数参数验证的一部分,我想对此进行测试。 最佳答案 std::weak_ptr:

c++ - 可以将过期的weak_ptr 与未初始化的weak_ptr 区分开来吗?

例如:std::weak_ptrwp1(std::make_shared());std::weak_ptrwp2;assert(PointsToValidOrExpiredObject(wp1));assert(!PointsToValidOrExpiredObject(wp2));这样的功能可能吗?用例:类的构造函数采用std::weak_ptr作为依赖。传递过期对象是可以的(可能在某些工作流中发生),但传递null意味着程序员忘记了一些东西。作为构造函数参数验证的一部分,我想对此进行测试。 最佳答案 std::weak_ptr:

c++ - 有条件地使用 std::lock_guard

我有一个函数,语句foo应该在lock_guard下执行,但只有当一个指向mutex对象的指针被提供给函数作为参数。否则foo不必由lock_guard保护。我不能在if中使用lock_guard,因为当if阻塞时锁会立即释放结束。所以,这段代码是胡说八道:bar(std::mutex*optionalMutex=nullptr){...if(nullptr!=optionalMutex){std::lock_guardlockScope(*optionalMutex);}我尝试过这样的事情:bar(std::mutex*optionalMutex=nullptr){...nullpt

c++ - 有条件地使用 std::lock_guard

我有一个函数,语句foo应该在lock_guard下执行,但只有当一个指向mutex对象的指针被提供给函数作为参数。否则foo不必由lock_guard保护。我不能在if中使用lock_guard,因为当if阻塞时锁会立即释放结束。所以,这段代码是胡说八道:bar(std::mutex*optionalMutex=nullptr){...if(nullptr!=optionalMutex){std::lock_guardlockScope(*optionalMutex);}我尝试过这样的事情:bar(std::mutex*optionalMutex=nullptr){...nullpt

c++ - boost::shared_ptr 和动态转换

我在使用基类的shared_ptr时遇到问题,我似乎无法在取消引用派生类的方法时调用它。我相信代码会比我更冗长:classBase:publicboost::enable_shared_from_this{public:typedefboost::shared_ptrpointer;};classDerived:publicBase{public:staticpointercreate(){returnpointer(newDerived);}voidanyMethod(){Base::pointerfoo=Derived::create();//Ican'tcallanymethod

c++ - boost::shared_ptr 和动态转换

我在使用基类的shared_ptr时遇到问题,我似乎无法在取消引用派生类的方法时调用它。我相信代码会比我更冗长:classBase:publicboost::enable_shared_from_this{public:typedefboost::shared_ptrpointer;};classDerived:publicBase{public:staticpointercreate(){returnpointer(newDerived);}voidanyMethod(){Base::pointerfoo=Derived::create();//Ican'tcallanymethod

c++ - 使用 Boost Python & std::shared_ptr

我正在尝试让BoostPython与std::shared_ptr很好地配合使用。目前,我收到此错误:Traceback(mostrecentcalllast):File"test.py",line13,incomp.place_annotation(circle.centre())TypeError:Noto_python(by-value)converterfoundforC++type:std::shared_ptr来自调用circle.centre(),它返回一个std::shared_ptr。我可以将每个std::shared_ptr更改为boost::shared_ptr(

c++ - 使用 Boost Python & std::shared_ptr

我正在尝试让BoostPython与std::shared_ptr很好地配合使用。目前,我收到此错误:Traceback(mostrecentcalllast):File"test.py",line13,incomp.place_annotation(circle.centre())TypeError:Noto_python(by-value)converterfoundforC++type:std::shared_ptr来自调用circle.centre(),它返回一个std::shared_ptr。我可以将每个std::shared_ptr更改为boost::shared_ptr(

c++ - unique_ptr、pimpl/forward 声明和完整定义

我已经查看了问题here和here,但仍然无法找出问题所在。这是调用代码:#include"lib.h"usingnamespacelib;intmain(constintargc,constchar*argv[]){return0;}这是库代码:#ifndeflib_h#definelib_h#include#include#includenamespacelib{classFoo_impl;classFoo{public:Foo();~Foo();private:Foo(constFoo&);Foo&operator=(constFoo&);std::unique_ptrm_imp