问题标签 [shared-ptr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 共享指针如何工作?
共享指针如何知道有多少指针指向该对象?(shared_ptr,在这种情况下)
c++ - 使用 shared_ptr 实现 RCU(读取-复制-更新)?
我对用户空间 RCU(读取-复制-更新)非常感兴趣,并尝试通过 tr1::shared_ptr 模拟一个,这是代码,虽然我真的是并发编程的新手,请高手帮忙我来复习?
基本思想是,reader 调用 get_reading_copy() 来获取当前受保护数据的指针(假设它是第一代,或 G1)。writer 调用 get_updating_copy() 获取 G1 的副本(假设是 G2),并且只允许一个 writer 进入临界区。更新完成后, writer 调用 update() 进行交换,并使 m_data_ptr 指向 G2 数据。正在进行的读取器和写入器现在持有 G1 的 shared_ptr(s),读取器或写入器最终将释放 G1 数据。
任何新读者都会得到指向 G2 的指针,而新的写入者会得到 G2 的副本(假设它是 G3)。G1可能还没有发布,所以多代数据可能并存。
c++ - 将 mem_fun_ref 与 boost::shared_ptr 一起使用
按照这个页面的建议,我试图让 shared_ptr 调用IUnknown::Release()而不是删除:
错误 C2784: 'std::const_mem_fun1_ref_t<_Result,_Ty,_Arg> std::mem_fun_ref(_Result (__thiscall _Ty::* )(_Arg) const)' : 无法推断出 '_Result (__thiscall _Ty::* ) 的模板参数(_Arg) const' 来自 'ULONG (__cdecl IUnknown::* )(void)'
错误 C2784: 'std::const_mem_fun_ref_t<_Result,_Ty> std::mem_fun_ref(_Result (__thiscall _Ty::* )(void) const)' : 无法推导出 '_Result (__thiscall _Ty::* )(void ) const' 来自 'ULONG (__cdecl IUnknown::* )(void)'
错误 C2784: 'std::mem_fun1_ref_t<_Result,_Ty,_Arg> std::mem_fun_ref(_Result (__thiscall _Ty::* )(_Arg))' : 无法推断出 '_Result (__thiscall _Ty::* )的模板参数( _Arg)' 来自 'ULONG (__cdecl IUnknown::* )(void)'
错误 C2784: 'std::mem_fun_ref_t<_Result,_Ty> std::mem_fun_ref(_Result (__thiscall _Ty::* )(void))' : 无法推断出 '_Result (__thiscall _Ty::* )(void) 的模板参数'来自'ULONG (__cdecl IUnknown::*)(void)'
错误 C2661:'boost::shared_ptr::shared_ptr':没有重载函数需要 2 个参数
我不知道该怎么做。我有限的模板/函子知识使我尝试
但无济于事。有任何想法吗?
c++ - 非对象类型的 C++ 智能指针?
我正在尝试使用智能指针,例如 auto_ptr、shared_ptr。但是,我不知道如何在这种情况下使用它。
我不确定,但我认为存储变量只是一个 malloc 的内存,而不是 C++ 类对象。有没有办法将智能指针用于存储变量?
谢谢你。
c++ - 我可以从 boost 的weak_ptr 中得到一个原始指针吗?
是否可以从 boost::weak_ptr 获取原始指针?Boost 的 shared_ptr 有 get() 方法和“->”操作符。weak_ptr 没有相同的功能背后是否有一些理由?
c++ - 为 boost::shared_ptr 命名 typedef
愚蠢的问题,但说你有 Foo 类:
拥有 const Foo::RcPtr 不会阻止在类上调用非 const 方法,以下将编译:
但是命名一个 typedef ConstRcPtr 对我来说意味着 typedef 将是
这不是我感兴趣的。一个更奇怪但可能更准确的名字是 RcPtrConst:
然而,谷歌搜索 RcPtrConst 的命中率为零,因此人们不会将其用作 typedef 名称 :)
有没有人有任何其他建议?
c++ - 为什么 boost::shared_ptr -> 运算符不是内联声明的?
由于boost::shared_ptr
可以非常频繁地调用并简单地返回一个指针,所以->
运算符不是一个很好的候选者inlined
吗?
一个好的编译器会自动inline
这样做吗?
我应该为此失眠吗?:-)
c++ - intrusive_ptr:为什么不提供通用基类?
boost::intrusive_ptr
需要intrusive_ptr_add_ref
和intrusive_ptr_release
被定义。为什么不提供可以做到这一点的基类?这里有一个例子:http: //lists.boost.org/Archives/boost/2004/06/66957.php,但海报说“我不一定认为这是个好主意”。为什么不?
更新:我认为这个类可能与多重继承一起被滥用这一事实是不够的。任何从具有自己的引用计数的多个基类派生的类都会有同样的问题。这些引用计数是否通过基类实现没有区别。
我认为多线程没有任何问题。boost::shared_ptr
提供原子引用计数,这个类也可以。
c++ - 带有 boost shared_ptr 的自定义(池)分配器
我希望从池中分配由 shared_ptr 管理的对象,比如 Boost 的 Pool 接口,如何实现?
c++ - shared_ptr 在哪里?
经过几个小时试图找到 shared_ptr 的位置后,我现在非常沮丧。我看到的所有示例都没有显示包含shared_ptr
(和工作)标题的完整代码。简单地说std
,tr1
根本<memory>
没有帮助!我已经下载了提升,但仍然没有出现!有人可以告诉我在哪里可以找到它吗?
谢谢你让我发泄我的不满!
编辑:我看到我的标题已更改。对于那个很抱歉。所以...这也是因为我不清楚 shared_ptr 是否“依赖于 C++ 版本”->这就是我没有说明我的环境的原因->因此可能是为什么我很难找到它。
我正在研究 MSVS2008。
编辑 2:我不知道为什么,但我在到处寻找 shared_ptr 时包括 [memory] 和 [boost/tr1/memory.hpp] 和 [boost/tr1/tr1/memory] .. 当然,我不能不。
感谢所有的回复。