问题标签 [enable-shared-from-this]
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++ - 为什么 enable_shared_from_this 嵌入弱指针而不是直接嵌入引用计数器?
帮助程序包含一个弱指针,该enable_shared_from_this
指针在创建指向对象的共享指针时设置。这意味着在对象中有引用计数(单独分配或与对象一起分配make_shared
)和一个额外weak_ptr
的对象。
现在为什么它不简单地包含引用计数呢?从哑指针设置shared_ptr
时,必须完全定义类型,因此shared_ptr
构造函数或赋值运算符可以检测到类型派生自enable_shared_from_this
并使用正确的计数器,并且格式可以保持不变,因此复制无关紧要。事实上,shared_ptr
已经必须检测到它来设置嵌入式weak_ptr
.
c++ - bad weak pointer when base and derived class both inherit from boost::enable_shared_from_this
I have a base class which derives from boost::enable_shared_from_this, and then another class which derives from both the base class and boost::enable_shared_from_this:
This compiles but at runtime it gives
What is causing this, and is there some way around it?
EDIT:
What if I need something like this:
such that A and B both need shared_from_this on their own (and one can't inherit it from the other), and C needs A, B, and shared_from_this?
c++ - 提升 shared_from_this 和多重继承
我目前在使用 boostenable_shared_from_this
和多重继承时遇到了一些麻烦。
该场景可以描述如下:
类
A
实现了一些功能,应该继承自enable_shared_from_this
类
B
实现了另一个功能,应该继承自enable_shared_from_this
类从和( )
D
继承功能A
B
class D : public A, public B {}
当使用类中的某些类
B
功能时,D
我遇到了异常(bad_weak_ptr
)enable_shared_from_this
从类继承D
不是我的选择
我不确定如何解决这个问题。
哦,我正在使用 Visual C++ 2010。
c++ - enable_shared_from_this 的双重继承
我有一个从其他两个对象(A 和 B)派生的对象(Z)。
enable_shared_from_this<>
A 和 B 都分别来自enable_shared_from_this<A>
和enable_shared_from_this<B>
。
当然,我会调用shared_from_this()
Z。当然,编译器会将此报告为模棱两可的。
我的问题是:
- 继承两次是安全的
enable_shared_from_this<>
还是会创建两个单独的引用计数(不好!) - 如果不安全,我该如何解决?
注意:当基类和派生类都继承自 boost::enable_shared_from_this但它并没有真正回答时,我发现了另一个问题bad weak pointer。我也应该使用这个virtual
技巧吗?
c++ - 在多重继承中使用 enable_shared_from_this
BIenable_shared_from_this
在我的代码中使用,我不确定它的用法是否正确。这是代码:
make_shared_from_this()
假设它们总是通过shared_ptr
D调用,这些用法是否正确?
c++ - shared_ptr 如何检测到 T 派生自 enable_shared_from_this?
我试图通过从头开始实现 shared_ptr 来了解它是如何工作的,但我不知道如何检测 T 的基类。
我试过使用 is_base_of(),但它给出了一个 const 值,我不能用 if 语句来设置对象的内部weak_ptr。
我是这样想的:
但到目前为止还没有运气。Boost 和 VC++ 的实现对我来说太混乱了,我正在寻找一个简单的解释。
这里说
std::shared_ptr 的构造函数检测 enable_shared_from_this 基的存在并将新创建的 std::shared_ptr 分配给内部存储的弱引用。
是啊,怎么样?
c++ - 可以在没有 enable_shared_from_this 的情况下实现 shared_from_this 吗?
使用时似乎有一些边缘情况enabled_shared_from_this
。例如:
shared_from_this
不使用就可以实现吗enable_shared_from_this
?如果是这样,它可以做得那么快吗?
c++ - std::enable_shared_from_this;公共与私人
我使用 shared_ptr 和 enable_shared_from_this 玩了一会儿,但遇到了一些我不太了解的东西。
在我的第一次尝试中,我构建了这样的东西:
请注意,此类正在私下扩展 std::enable_shared_from_this。这显然有很大的不同,因为执行这样的事情:
引发 bad_weak_ptr 异常。好像我将类定义更改为从 std::enable_shared_from_this 公开的固有的,这只是查找。
为什么会这样,我在这里想念什么?并且没有办法让它适用于私有继承,因为 shared_test 类的“外部世界”不需要知道它正在启用共享......(至少,如果你问我,还是我又错过了什么?)
c++ - 我们什么时候应该使用 std::enable_shared_from_this
我只知道std::enable_shared_from_this
这个链接。
但是看了下面的代码,不知道什么时候用。
上面的代码“不太好”,因为shared_ptr
在调用getptr()
. 所以好的应该是:
但是,如果我已经有一个shared_ptr
对象,为什么不简单地编写这样的代码:std::shared_ptr<Good> gp2 = gp1;
,这意味着我根本不需要std::enable_shared_from_this
。
在我看来,使用std::enable_shared_from_this
是为了确保多个shared_ptr
对象具有相同的控制块,这样我们就可以避免双重删除问题。但是如果我必须shared_ptr
在开始时提醒自己创建一个,为什么我不提醒自己使用shared_ptr
对象来创建一个新对象,而不是使用原始指针呢?
c++ - 来自同一个 enable_shared_from_this 实例的两个 shared_ptr
鉴于此类是enable_shared_from_this:
std::shared_ptr
假设我创建了两个from 的实例 ,connection*
如下所示:
到目前为止它很好,因为资源 { connection*
} 由一个人 shared_ptr
拥有——rc
准确地说,fc
只是有一个假删除器。
之后,我这样做:
现在哪个shared_ptr
-rc
或fc
- 将sc
与它共享它的引用计数?换句话说,
这些应该打印什么?我测试了这段代码,发现 rc
似乎只有.2
fc
1
我的问题是,为什么会这样?正确的行为及其理由应该是什么?
我正在使用 C++11 和 GCC 4.7.3。