【发布时间】:2019-08-08 20:19:12
【问题描述】:
我很难理解下面给出的这段代码。
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 的派生类吗?
注意:
添加标签 [boost] 是因为 code example 取自 boost 库之一。请查看示例以了解程序中如何使用shared_from_this
Ps 1:-尽可能更改合适的标题。
【问题讨论】:
-
要了解它,您必须先了解Curiously Recurring Template Pattern (or CRTP)。
-
另外,对于这里显示的简单案例,我看不出有任何理由使用
std::enable_shared_from_this或共享指针(或任何类型的指针)。为什么不直接做Cls_X(ioc, ctx).Func2(Varcopy_ptr);?考虑到所创建对象的临时性和临时性,Cls_X是否需要成为一个类?Func2不能成为非成员函数吗?可能使用ioc和ctx作为额外参数? -
您的示例并未真正展示其用途。
enable_shared_from_this顾名思义就是从this获取共享指针。您的示例可以在不继承enable_shared_from_this的情况下工作 -
@Someprogrammerdude 实际上这篇文章是故意使看起来简单并专注于(我的)困惑。作为参考,我在 Ps 1 中添加了指向几乎相似代码的链接。这将回答您的疑问“Cls_X 是否需要成为一个类”。我正在通过en.wikipedia.org/wiki/Curiously_recurring_template_pattern
-
我建议你重新表述问题,因为现在你可以放心地忽略
Cls_X继承自enable_shared_from_this的事实,实际上没有必要理解代码 sn-p,虽然我觉得这是你真正想问的问题
标签: c++ inheritance boost shared-ptr