了解 class 共享指针及其在继承中的使用

Understanding the class shared pointers and its use in inheritance

我很难理解下面给出的这段代码。

class Child1 : public Base1 {
public:
    int Func1(char *Var);
}

class Cls_X: public std::enable_shared_from_this<Cls_X> {
public:
    void Func2(char *Var_copy);
}

Func2Func1 调用如下

int Func1(char * Var){
    ...
    make_shared<Cls_X>(ioc, ctx)->Func2(Varcopy_ptr);
    ...
}

问题:

注意:

添加标签 [boost] 是因为 code example 取自其中一个 boost 库。请查看示例以查看shared_from_this在程序中的使用方式

Ps 1:- 如果可能,请更改合适的标题。

How class Cls_X: public std::enable_shared_from_this<Cls_X> works?

它可以工作 iff​​ 模板的特殊化 class(此处 std::enable_shared_from_this<Cls_X>)不需要接收类型参数(此处 Cls_X) 这是一个完整的类型。

template <typename T>
struct has_a_member { T mem; };

template <typename T>
struct has_a_pointer { T *ptr; };

struct A : has_a_member<A> // error at this point: 
                           // A is incomplete at this point
                           // the definition of has_a_member<A> cannot be instantiated 
{
};

struct B : has_a_pointer<B> // OK, B is incomplete 
                            // still has_a_pointer<B> can be instantiated
{
};

并且 enable_shared_from_this 旨在通过预期不完整的类型在这种情况下工作。