问题标签 [weak-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_ptrs 吗?
我有一个简单的事件处理系统,它给我带来了问题。要使用它,我从类继承EventHandler
。然后构造函数在构造时注册每个对象。
这是EventHandler
的构造函数:
这调用了将其存储在向量中EventDispatcher
的成员函数。registerListener()
mLisernerList 在哪里看起来像:
EventDispatcher
只需调用向量的每个sendEvent()
元素上的 来通知它事件。
让我举一个例子来说明我的问题。假设我的类Buttons
继承自EventHandler
. 我将在堆上创建按钮对象,然后将指向所有按钮的智能指针放在一个向量中。
发生的事情是我最终得到了unique_ptr
mButtons 中的 s 向量和 mListenerList 中指向相同动态分配的 Button 对象的原始指针向量。我不希望智能指针和原始指针指向同一个对象。
理想情况下,我希望 mButtons 中的shared_ptr
s 向量和 mListenerList 中的s 向量weak_ptr
指向动态分配的 Button 对象,同时允许 EventHandler 在创建时注册每个对象。这可能吗?
c++ - 比较 connection_hdl (weak_ptr) 是否相等
我需要比较两个websocket++ connection_hdl:
我试过这段代码
但编译器抱怨说connection_hdl is not a template
。
可以修改上面的代码来比较connection_hdls吗?connection_hdls 可以通过使用 owner_less 与容器一起使用,因此根据我的经验,可以使用所有权进行比较是有道理的。
我能找到的唯一其他相关技术是比较weak_ptrs
这似乎接近我的需求,但由于我的经验不足,我无法确定或修改该代码以适应我的意图。
如何比较两个 connection_hdls 是否相等?
这安全吗?
我将第一个代码修改为此
它编译。除了 weak_ptr 空虚警告之外,这是否安全?我的经验不足使我无法准确确定,而我有限的经验告诉我,仅仅因为它可以编译,并不意味着它会按预期工作。
c++ - 将 std::shared_ptr 的容器 ( std::vector ) 过滤为 std::weak_ptr 的容器
我正在尝试过滤 shared_ptr 的容器,并尝试将过滤后的内容保存在非拥有容器(weak_ptr)中。下面发现的程序崩溃了。有人可以看到我错过了什么吗?
c++ - C++ 11 智能指针所有权和强制转换
我有一个基实体类和派生类,如牛和鸡......
我正在尝试学习使用 std 智能指针正确管理内存。我现在做事的方式,我的派生类唯一存在的地方是共享指针的向量,比如......
我的 Entity 类负责管理任何两个实体之间的关系,无论它们是否具有相同的类型。为此,它保留了一个关系对象列表,看起来像......
我使用弱指针是因为牛或鸡可能会死,在这种情况下它们与其他实体的关系应该变得无效。
所以这是我的问题。我将所有内容存储为派生类的共享指针,但我的 Entity 类中的所有代码都使用指向基类的弱指针。我经常需要将弱实体指针转换为共享 Cow 指针或将共享 Cow 指针转换为弱实体指针。
不知何故,我的代码允许我在上面的 Entity 类的 createRelationship(...) 的参数中传递 shared_ptr 对象。我真的不知道为什么会编译,我想知道这样做是否有效。我是否应该手动将其转换为弱指针,然后使用 static_pointer_cast 进行转换?(我问这个是因为我已经读过将共享指针作为参数传递很慢,而且我担心这种情况正在发生)。
另一方面,有时我知道某些关系存在于两个相同类型的实体之间。为了说明我的观点,一头奶牛需要从其父母那里继承其基因:它搜索其关系以找到亲子关系,然后访问指向其父母的弱实体指针。为了访问它们的遗传成员变量,它需要将这些指向实体的弱指针转换为指向 Cows 的共享指针。我一直在使用 weak_ptr.lock() 后跟 dynamic_pointer_cast 来完成这个。
这是执行这两个(反向相关)强制转换的有效方法吗?任何一般性评论或参考资料都值得赞赏,因为我试图有效地使用这些指针。
c++ - 简单参数转发(我的签名应该是什么?)
例如,假设我正在为向量的 push_back 方法编写一个瘦包装器。
我的问题是该函数的正确签名是什么myPushBack
?myPushBack
那么我的下一个问题是,如果vec
是 type ,函数的正确签名是什么std::vector<weak_ptr<Bar>>
?
c++ - 存储指向自身的弱指针
我使用的代码库部分由喜欢简单问题的过于复杂的解决方案的人实现(例如,具有两个参数的模板类只为一对类型实例化)。她所做的一件事是在智能指针中创建对象,然后让对象存储一个指向自身的弱指针。
然后该类通过锁定它并传递结果共享指针来继续使用 m_self。
在我的一生中,我无法理解她想要完成什么。是否有一些模式或想法可以解释这个实现?在我看来,这完全没有意义,我想重构它。
编辑:我应该提到,使用从锁定 m_self 获得的结果智能指针的地方都没有真正保留智能指针。
java - 如何在 swig 中使用weak_ptr?
SWIG 主页说 shared_ptr 是经过特殊处理的,但weak_ptr 不是。这是否意味着 weak_ptr 支持在 SWIG 中有一些错误/问题?如果可以用,怎么用?任何人都可以提供一个示例 .i 代码吗?非常感谢。
c++ - 是否保证当 shared_ptr 重置为包含的相同地址时,weak_ptr 会过期?
是否保证当 shared_ptr 重置为包含的相同地址时,weak_ptr 会过期?
wi.expired()
或者是没有定义值的情况?
编辑:
我现在稍微修改一下问题:
是否保证在重置为相同地址weak_ptr
时会过期shared_ptr
,该地址包含shared_ptr
初始化时的地址weak_ptr
?
shared-ptr - 禁用从 std::weak_ptr 到 std::shared_ptr 的转换
我知道我可以“促进”weak_ptr
喜欢shared_ptr
这样:
我的问题是:可以以某种方式防止这种情况吗?
作为一个练习,我想创建我自己的WeakPtrFactory的非常简单的实现。它this
作为类成员启动,然后 spawnweak_ptr
将在对象销毁时失效。我的尝试只是用作shared_ptr
私有成员并返回weak_ptr
用它创建的 s(以防万一,不传递操作删除器)。但它有明显的缺点,因为每个人都可以将它们提升回shared_ptr
并打破整个机制。
c++ - weak_ptr 在 shared_ptr 中的作用
除了weak_ptr 的作用外,我了解shared_ptr 的工作原理。我知道当引用计数不为零时它可以检测循环引用,但除此之外我不明白它是如何做到这一点的。它有什么作用?