草庐IT

shared_lock

全部标签

c++ - shared_ptr, unique_ptr, ownership,在这种特殊情况下我是不是做得太过分了?

我在图形应用程序上工作,并且一直在使用共享指针和唯一指针,主要是因为它为我处理内存重新分配(又名方便),这可能很糟糕(如果这就是我使用它们的原因)。我最近在Stackoverflow上阅读了一个问题的答案,其中提到根据B.Stroustrup的说法,通常不应使用唯一/共享指针,而应改为按值传递参数。我有一个图形方面的案例,我认为使用shared_ptr是有意义的,但我想从专家那里知道(我不是C++专家)我是否在做/想它,如果是的话他们会做什么(为了符合C++推荐和效率)我将以渲染/光线追踪中出现的一般问题为例。在这个特定的问题中,我们有一个对象池(我们将使用三角形来进行解释)和一个结构

c++ - 安全地将(shared_ptr 的 vector 到对象)转换为(shared_ptr 的 vector 到常量对象)

classA{};typedefshared_ptrAConstPtr;typedefshared_ptrAPtr;vectorptr;constvector*foo(){return&ptr;}此代码无法编译,因为“没有从vectorAptr>*到constvectorAConstPtr>*的隐式转换”有没有办法在不创建新vector且不使用不安全强制转换的情况下完成这项工作?我需要这个的原因是因为我有一个类在内部将列表存储为vectorAPtr>,但需要通过其接口(interface)公开它的一个完全const版本。 最佳答案

c++ - try_lock_for 未按预期工作

我正在摆弄一些C++中的代码,由于某种原因不想工作,我将它缩小到这种情况:#include#include#include#include#includeusingnamespacestd;voidtest(){timed_mutexm;m.lock();std::cout问题是test()根本不会阻塞,即使try_lock返回false。有没有我忽略的东西,或者这是gcc中的错误,或者我接下来应该去哪里找出问题所在?感谢任何建议和帮助!我像这样编译了这个小程序:g++-pthread-std=c++11threads.cpp-othreads如果有任何帮助,这是gcc和我的操作系统的

c++ - 如何使用 shared_ptr 并从 enable_shared_from_this 继承来制作克隆方法

我已经看到编写返回boost::shared_ptr的克隆方法的一种有用方法是做classA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualA*CloneImpl()const{return(newA(*this));}};classB:publicA{public:shared_ptrClone()const{return(shared_ptr(CloneImpl()));}protected:virtualB*CloneImpl()const{return(newB(*

c++ - std::unique_ptr 和 std::shared_ptr 之间破坏行为差异的基本原理是什么?

来自http://en.cppreference.com/w/cpp/memory/unique_ptr:IfTisderivedclass(sic)ofsomebaseB,thenstd::unique_ptrisimplicitlyconvertibletostd::unique_ptr.Thedefaultdeleteroftheresultingstd::unique_ptrwilluseoperatordeleteforB,leadingtoundefinedbehaviorunlessthedestructorofBisvirtual.Notethatstd::shared

c++ - 没有 RTTI 的 shared_ptr?

我正在尝试在使用xc321.34(gcc4.5.2的衍生物)构建的嵌入式项目中使用shared_ptr。该项目使用-fno-rtti禁用了RTTI。#include仅包含header会出现以下错误:/Applications/microchip/xc32/v1.34/bin/bin/../../lib/gcc/pic32mx/4.5.2/../../../../pic32mx/include/Cpp/memory:Inmemberfunction'virtualvoid*std::tr1::_Ref_count_del::_Get_deleter(conststd::type_info

c++ - 使用 shared_ptr 和 weak_ptr 时避免间接循环引用

我目前正在组装一个严重依赖shared_ptr的应用程序,到目前为止一切看起来都很好-我已经完成了我的homework并且非常清楚使用shared_ptr的一些陷阱shared_ptr最常见的问题之一是循环依赖-这些问题可以通过存储weak_ptr来解决,这些weak_ptr不会影响上链对象的生命周期.但是,我很难理解需要通过weak_ptr存储指向外部对象的指针的时间-我不确定它是否被禁止、不鼓励,或者是否这是安全的。下图描述了我的意思(黑色箭头表示shared_ptr;虚线表示weak_ptr):alttexthttp://img694.imageshack.us/img694/6

c++ - 我可以将 boost::make_shared 与私有(private)构造函数一起使用吗?

考虑以下几点:classDirectoryIterator;namespacedetail{classFileDataProxy;classDirectoryIteratorImpl{friendclassDirectoryIterator;friendclassFileDataProxy;WIN32_FIND_DATAWcurrentData;HANDLEhFind;std::wstringroot;DirectoryIteratorImpl();explicitDirectoryIteratorImpl(conststd::wstring&pathSpec);voidincreme

c++ - 将 boost::shared_lock 升级为独占锁

谁能解释一下boost::upgrade_lock的正确用法。以下代码导致死锁//Globaltypedefboost::shared_mutexMutex;typedefboost::shared_lockReadLock;typedefboost::upgrade_lockUpgradeLock;typedefboost::upgrade_to_unique_lockWriteLock;MutexsharedMutex;//Multithreadedreaderandwriter{ReadLockread(sharedMutex);for(intii=0;ii如果我在升级前用rea

c++ - 如何在 std::pair 中返回 std::lock_guard

当我从函数返回std::pair中的std::lock_guard时,我遇到了可怕的错误。但是当我将它打包在一个类中时,我没有任何问题(按预期编译和工作)。我不明白为什么。详情如下:我设计了一个小模板类来方便地锁定和解锁共享对象。它不是特别创新,但C++17允许它非常紧凑并且代码读/写友好:templateclassLocked{public:Locked(T&_object,std::mutex&_mutex):object(_object),lock(_mutex){}T&object;std::lock_guardlock;};templateclassLockable{publ