问题标签 [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.
dll - 在 DLL 接口中使用 boost::shared ptr 可以吗?
在 C++ 中开发一个返回 boost 共享指针并将它们用作参数的 DLL 是否有效?
那么,这样导出函数可以吗?
特别是:引用计数是否跨 DLL 边界工作,或者要求 exe 和 dll 使用相同的运行时?
目的是克服对象所有权的问题。因此,当 dll 和 exe 不再引用它时,该对象将被删除。
c++ - 查找 boost::shared_ptr 循环引用
是否有任何提示/技巧来查找 shared_ptr 的循环引用?
这是我试图找到的一个例子 - 不幸的是,我似乎无法在我的代码中找到循环。
c++ - 提升,共享ptr与弱ptr?什么时候用?
在我目前的项目中,我使用boost::shared_ptr
得相当广泛。
最近我的队友也开始使用weak_ptr
. 我不知道该使用哪一个以及何时使用。
除此之外,如果我想转换weak_ptr
为shared_ptr
. 锁定weak_ptr
以创建shared_ptr
会影响我在其他线程中的代码吗?
c++ - 为什么我不能使用 getter 访问公共 var?
有一个包含这些语句的文件:
我可以这样使用它:
但不像我想要的那样:
使用getter函数,出现如下错误:
“Housekeeping::TBFInstallation::getTBFCmdHandler”:无法将“this”指针从“const Housekeeping::TBFInstallation”转换为“Housekeeping::TBFInstallation &”
这里出了什么问题?
c++ - C++ smart pointer const correctness
I have a few containers in a class, for example, vector or map which contain shared_ptr's to objects living on the heap.
For example
I want to have a public interface of this class that sometimes returns shared_ptrs to const objects (via shared_ptr<const T>
) and sometimes shared_ptr<T>
where I allow the caller to mutate the objects.
I want logical const correctness, so if I mark a method as const, it cannot change the objects on the heap.
Questions:
1) I am confused by the interchangeability of shared_ptr<const T>
and shared_ptr<T>
. When someone passes a shared_ptr<const T>
into the class, do I:
- Store it as a
shared_ptr<T>
orshared_ptr<const T>
inside the container? - OR
- Do I change the map, vector types (e.g. insert_element(
shared_ptr<const T>
obj)?
2) Is it better to instantiate classes as follows: MyExample<const int>
? That seems unduly restrictive, because I can never return a shared_ptr<int>
?
c++ - 维护一个 std::set
我正在用 C++ 编写游戏和随附的引擎。该引擎严重依赖于使用简单的嵌入式脚本语言的自动化。脚本可以创建对象类,在它们上定义事件监听器,并从中产生实例。目前,实例必须绑定到脚本全局标识符才能保持其存在。这样做的明显结果是不能有匿名对象,这将是迄今为止最常见的。
目前,实例是使用 来管理的std::set<Instance*, spatial_sort>
,其中spatial_sort
是一个按位置对实例进行排序的仿函数,用于渲染和碰撞检测。在假设它们不太可能在五十分之一秒内移动很多的情况下,使用它们的当前位置作为提示,实例被删除并重新插入每一帧。如果dead
在实例中设置了标志,则会从集合中删除它。构造Instance
函数和析构函数分别调用insert(this)
和erase(this)
。
为了允许匿名实例,我想将集合更改为 a std::set<boost::shared_ptr<Instance>, spatial_sort>
,这将允许Instance
共享实例的所有权并保持它们的存在,直到它们自我毁灭。不幸的是,由于insert()
需要将调用放在构造函数中,shared_from_this()
因此无法获得shared_ptr
对Instance
. Instance
碰巧已经boost::enable_shared_from_this<>
通过其基类继承并不重要。
谁能推荐一个合适的解决方法?
编辑:
我做了我一开始应该做的事情,并将Instance
类的行为分为两个类:Instance
和Reference
. new SomeClass
然后,脚本中的表达式将 a 返回Reference
到 new Instance
。Instance
对象本身从不使用 a 进行管理,shared_ptr
因此它们负责自杀以响应合适的事件,例如动画结束、关卡结束等。
谢谢您的帮助!重构是一个很好的解决方案,只要它有效。
c++ - 将 shared_ptr 的序列化问题提升到 std 容器
嗨,我正在使用 boost/1.41.0,当我尝试反序列化 shared_ptr 时,以下代码给了我编译错误。它编译成功的序列化部分。如果这是我的代码中的错误或提升的一般问题,有人可以告诉我吗?谢谢。
燕超
c++ - 使用 shared_ptr 和 weak_ptr 时避免间接循环引用
我目前正在整理一个严重依赖的应用程序,shared_ptr
到目前为止一切看起来都很好——我已经完成了我的功课shared_ptr
,并且对使用s的一些陷阱有一个很好的了解。
最公认的问题之一shared_ptr
是循环依赖——这些问题可以通过存储weak_ptr
不影响链上对象生命周期的 s 来解决。但是,我正在努力解决需要通过 a 存储指向外部对象的指针的时间weak_ptr
-我不确定它是否被禁止、不鼓励或是否安全。
下图描述了我的意思(黑色箭头表示shared_ptr
;虚线表示weak_ptr
):
替代文字 http://img694.imageshack.us/img694/6628/sharedweakptr.png
- 父级包含
shared_ptr
s 到两个子级,这两个子级都使用 a 指向父级weak_ptr
。 - 在第一个孩子的构造函数中,我通过父级检索
weak_ptr
指向第二个孩子的指针并将其存储在本地。
代码如下所示:
我已经对此进行了测试,它似乎工作正常(我没有收到任何内存泄漏的报告),但是我的问题是:这安全吗?如果没有,为什么不呢?
c++ - 关于 shared_ptr 用法的问题 - C++
我对使用shared_ptr
.
问题 1
抄袭shared_ptr
便宜吗?还是我需要将它作为对我自己的辅助函数的引用并作为值返回?就像是,
问题2
我应该boost::make_shared
用来构造一个shared_ptr
吗?如果是,它提供了哪些优势?make_shared
当T
没有无参数构造函数时,我们如何使用?
问题 3
如何使用const foo*
?我找到了两种方法来做到这一点。
或者
问题 4
如何返回并检查NULL
对象shared_ptr
?是不是有点像,
任何帮助都会很棒。
c++ - 使用 make_shared 创建 shared_ptr 有什么缺点吗
make_shared<T>()
使用 using而不是 using有什么缺点吗shared_ptr<T>(new T)
?
Boost 文档状态
用户反复请求创建一个给定类型的对象并返回一个 shared_ptr 给它的工厂函数。除了方便和风格之外,这样的函数也是异常安全的,并且速度相当快,因为它可以对对象及其相应的控制块使用单个分配,从而消除了 shared_ptr 构造开销的很大一部分。这消除了关于 shared_ptr 的主要效率抱怨之一。