了解 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);
}
Func2
从 Func1
调用如下
int Func1(char * Var){
...
make_shared<Cls_X>(ioc, ctx)->Func2(Varcopy_ptr);
...
}
问题:
class Cls_X: public std::enable_shared_from_this<Cls_X>
是如何工作的?
尝试谷歌搜索但无法理解相关文档,有人可以用简单的英语解释一下吗?
这里 Cls_X 和 Child1 都是从 Base1 派生的 class 吗?
注意:
添加标签 [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
旨在通过预期不完整的类型在这种情况下工作。
我很难理解下面给出的这段代码。
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);
}
Func2
从 Func1
调用如下
int Func1(char * Var){
...
make_shared<Cls_X>(ioc, ctx)->Func2(Varcopy_ptr);
...
}
问题:
class Cls_X: public std::enable_shared_from_this<Cls_X>
是如何工作的? 尝试谷歌搜索但无法理解相关文档,有人可以用简单的英语解释一下吗?这里 Cls_X 和 Child1 都是从 Base1 派生的 class 吗?
注意:
添加标签 [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
旨在通过预期不完整的类型在这种情况下工作。