问题标签 [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.

0 投票
3 回答
1301 浏览

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.

0 投票
2 回答
4387 浏览

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?

0 投票
3 回答
6892 浏览

c++ - 提升 shared_from_this 和多重继承

我目前在使用 boostenable_shared_from_this和多重继承时遇到了一些麻烦。

该场景可以描述如下:

  1. A实现了一些功能,应该继承自enable_shared_from_this

  2. B实现了另一个功能,应该继承自enable_shared_from_this

  3. 类从和( )D继承功能ABclass D : public A, public B {}

  4. 当使用类中的某些类B功能时,D我遇到了异常(bad_weak_ptr

  5. enable_shared_from_this从类继承D不是我的选择

我不确定如何解决这个问题。

哦,我正在使用 Visual C++ 2010。

0 投票
3 回答
9903 浏览

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技巧吗?

0 投票
1 回答
20097 浏览

c++ - 在多重继承中使用 enable_shared_from_this

BIenable_shared_from_this在我的代码中使用,我不确定它的用法是否正确。这是代码:

make_shared_from_this()假设它们总是通过shared_ptrD调用,这些用法是否正确?

0 投票
2 回答
318 浏览

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 分配给内部存储的弱引用。

是啊,怎么样?

0 投票
2 回答
1138 浏览

c++ - 可以在没有 enable_shared_from_this 的情况下实现 shared_from_this 吗?

使用时似乎有一些边缘情况enabled_shared_from_this。例如:

提升 shared_from_this 和多重继承

shared_from_this不使用就可以实现吗enable_shared_from_this如果是这样,它可以做得那么快吗?

0 投票
4 回答
2990 浏览

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 类的“外部世界”不需要知道它正在启用共享......(至少,如果你问我,还是我又错过了什么?)

0 投票
3 回答
6149 浏览

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对象来创建一个新对象,而不是使用原始指针呢?

0 投票
2 回答
810 浏览

c++ - 来自同一个 enable_shared_from_this 实例的两个 shared_ptr

鉴于此类是enable_shared_from_this

std::shared_ptr假设我创建了两个from 的实例connection*如下所示:

到目前为止它很好,因为资源 { connection*} 由一个 shared_ptr拥有——rc准确地说,fc只是有一个假删除器。

之后,我这样做:

现在哪个shared_ptr-rcfc- 将sc 与它共享它的引用计数?换句话说,

这些应该打印什么?我测试了这段代码,发现 rc似乎只有.2fc1

我的问题是,为什么会这样?正确的行为及其理由应该是什么?

我正在使用 C++11 和 GCC 4.7.3