从std :: enable_shared_from_this继承

伊戈尔

我有下一个代码:

class A 
{
    virtual ~A() = default;
    virtual void foo1() = 0;
};
class B
{
    virtual ~B() = default;
    virtual void foo2() = 0;
};

class C: public A, public std::enable_shared_from_this<C>, public B
{
    void foo1() override
    {
    }

    void foo2() override
    {
    }
};

类std :: enable_shared_from_this放在类B之前是否正确?std :: enable_shared_from_this在哪里有关系吗?

生锈的

哪里std::enable_shared_from_this有关系吗?

从技术上讲,这并不重要。

派生顺序会影响构造函数和析构函数调用的顺序。

  • 从构造的角度来看,enable_shared_from_this<T>构造函数是空手而归;它只是weak_ptr向类自身添加了一个值初始化,即为空,并由shared_ptr<T>构造函数检测到,该构造函数完全构造对象后立即将其自身分配给该成员

  • 从销毁的角度来看,即使在销毁之前之后销毁另一个基地也没有关系析构函数仍将被调用,并且相应的弱计数器(shared_ptr如果有的话)将适当减少,以便在时间到时释放它(出于真正的好奇,可以在此处找到异常清除规则)。

但是,从代码样式的角度来看,这可能很重要例如,以下声明可以说更具可读性:

class C: public A, public B, public std::enable_shared_from_this<C>
. . .

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

std :: enable_shared_from_this; 公共与私人

std :: enable_shared_from_this :: shared_from_this如何工作

pybind11,在使用 std::enable_shared_from_this 绑定 Trampolines 和多重继承时编译失败

为什么std :: enable_shared_from_this允许多个std :: shared_ptr实例?

std :: enable_shared_from_this:是否可以在析构函数中调用shared_from_this()?

为什么 std::enable_shared_from_this 不使用可变的 std::weak_ptr ?

我们什么时候应该使用std :: enable_shared_from_this

如何在父类和子类中使用std :: enable_shared_from_this?

可以从std :: enable_shared_from_this和抽象基类派生吗?

OS X上std :: enable_shared_from_this <>的编译错误

std :: enable_shared_from_this与其他所有者

尝试了解std :: enable_shared_from_this <T>,但使用它会导致bad_weak_ptr

从 enable_shared_from_this 继承的目的是什么?

从enable_shared_from_this继承并返回self的shared_ptr的类的子类

为继承enable_shared_from_this的类获取unique_ptr

可以在不继承的情况下使用enable_shared_from_this吗?

在具有虚拟析构函数的多态继承中使用 enable_shared_from_this

是否有unique_from_this()?或者如何从从enable_shared_from_this继承的类中返回unique_ptr

从基类继承std :: shared_from_this的std :: bad_weak_ptr

使用std :: enable :: if和std :: is_base_of约束继承

std :: shared_ptr和继承

“ enable_shared_from_this”的作用是什么?

Qt QObject和boost :: enable_shared_from_this

enable_shared_from_this 中的空弱指针

如何在模板函数中使用enable_shared_from_this?

如何从boost :: enable_shared_from_this派生模板模板类?

使用enable_shared_from_this的谷物库错误

std :: enable_if和std :: shared_ptr

它的派生类不能继承“ std :: shared_from_this”吗?