草庐IT

shared_mem

全部标签

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++ 重载基于 shared_ptr 派生类的函数

有很多与此类似的SO问题,但我无法准确找到我要找的内容。如果这是重复的,我很抱歉。我有一个Parent类和继承自它的两个派生类:classSon:publicParent{...};classDaughter:publicParent{...};然后我声明两个shared_ptr到基类,并用shared_ptr实例化它们对于每个派生类:shared_ptrson=shared_ptr(newSon());shared_ptrdaughter=shared_ptr(newDaughter());最后,我想要一个处理shared_ptr的类基于它指向哪个派生类。问题是我可以使用函数重载来实

c++ - 我应该使用 shared_ptr<Object> myObject = (shared_ptr<Object>) new Object() 来访问私有(private)构造函数吗?

我正在使用广泛使用以下语法的代码库:shared_ptrmyObject=(shared_ptr)newObject();我注意到我无法使用make_shared访问私有(private)构造函数,但是shared_ptrmyObject=(shared_ptr)newObject();工作得很好。我应该仅仅因为它看起来有效而使用它吗?有什么危险吗?它与make_shared有何不同??我知道this中的答案问题,它在make_shared之间进行比较和:std::shared_ptrp2(newObject("foo"));但我没能找到对我遇到的语法的引用。和上面有什么不同,还是一样

C++ 内部代码重用 : compile everything or share the library/dynamic library?

一般问题:对于非托管C++,内部代码共享有什么更好的?通过共享实际源代码来重用代码?或者通过共享库/动态库(+所有头文件)重用代码无论是哪一个:您减少重复代码(复制粘贴综合症)、代码膨胀的策略是什么?具体例子:以下是我们在我的组织中共享代码的方式:我们通过共享实际源代码来重用代码。虽然我们的项目实际上需要跨平台,但我们使用VS2008在Windows上进行开发。我们有许多项目(.vcproj)提交到存储库;有些可能有自己的存储库,有些可能是存储库的一部分。对于每个可交付的解决方案(.sln)(例如,我们交付给客户的东西),它将svn:externals从存储库中获取所有必要的项目(.v

c++ - 如何避免 shared_ptr 歧义? (STL 与提升)

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyis‘usingnamespacestd;’consideredabadpracticeinC++?我在我的代码中的很多地方都使用了STL的shared_ptr并且我在我使用过的任何地方都使用了以下using语句shared_ptr:usingnamespacestd::tr1;现在我需要使用boost::bimap。所以我必须在我的代码中包含以下头文件:#include一旦我包含了bimap头文件,shared_ptr类型就变得不明确了,我必须将shared_ptr的所有用法更改为std::tr1::

c++ - 为什么 std::shared_ptr 没有 [] 运算符?

这个问题在这里已经有了答案:Whyisn'tthereastd::shared_ptrspecialisation?(1个回答)关闭7年前。我想知道std::shared_ptr没有为数组定义[]运算符这一事实背后的基本原理是什么。特别是为什么std::unique_ptr具有此运算符而不是std::shared_ptr?

c++ - 如何从 shared_ptr 调用私有(private)析构函数?

我有一个resource_manager维护std::vector>的类在内部。resource_manager是resource的好友类.我要resources只能由resource_manager创建/删除,所以我将其构造函数设为私有(private)(可以正常工作)。但是,如果我将析构函数设为私有(private),则代码不会编译,因为析构函数由boost::shared_ptr调用,这不是resource的friend.我正在考虑通过只返回constresource*来强制执行“不要被客户删除”规则来自resource_manager,但不知何故我对这种方法提供的安全性不满意(

c++ - 如何将 shared_ptr 作为参数传递给可变对象?

我想通过对函数的智能指针引用传递一个对象。该函数可能会更改引用对象的值,但可能不会更改引用本身。有两种明显的方法可以解决这个问题。按值传递shared_ptr的第一种方法-它是引用,因此它本身不需要按引用传递。这样做的明显问题是引用的复制,这表明存在一些引用计数开销。voidfoo(shared_ptrp)第二种方法是通过const引用传递shared_ptr-避免复制shared_ptr实例,而是暗示对引用对象的访问需要两层解引用而不是一层。voidfoo(constshared_ptr&p)在实践中,这些理论开销通常微不足道且无关紧要。这对我来说表明,我应该几乎总是遵循一些标准惯例