我有下一个代码:
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] 删除。
我来说两句