您的位置:首页 > 教育 > 锐评 > 网站怎么开发设计_北京网站页设计制作_连云港seo优化_企业网站的类型

网站怎么开发设计_北京网站页设计制作_连云港seo优化_企业网站的类型

2025/1/15 11:12:15 来源:https://blog.csdn.net/m0_52329237/article/details/144410965  浏览:    关键词:网站怎么开发设计_北京网站页设计制作_连云港seo优化_企业网站的类型
网站怎么开发设计_北京网站页设计制作_连云港seo优化_企业网站的类型

用途

struct S
{shared_ptr<S> dangerous(){return shared_ptr<S>(this);   // don't do this!}
};int main()
{shared_ptr<S> sp1(new S);shared_ptr<S> sp2 = sp1->dangerous();return 0;
}

考虑以上代码,从一个被shared_ptr管理的struct中返回一个shared_ptr,明显这是有问题的,两个shared_ptr管理的是同一个this,会free两次,那么本质上就是,当我们有用一个this指针时,如何得到对应的shared_ptr呢

struct S : enable_shared_from_this<S>
{shared_ptr<S> not_dangerous(){return shared_from_this();}
};int main()
{shared_ptr<S> sp1(new S);shared_ptr<S> sp2 = sp1->not_dangerous();return 0;
}

如此便可,可以看到继承一个enable_shared_from_this

就可以实现,这种模板类可能少见,因为继承的父类的模板参数是子类,这是因为父类需要知道子类的类型去生成对应的函数. 这种称为奇异递归模板模式,可用来实现静态多态,参考https://blog.csdn.net/m0_52329237/article/details/116505275

注意

执行此操作时,请记住调用 share _from _this 的对象必须属于 share_ptr 对象。以下行不通:

int main()
{S *p = new S;shared_ptr<S> sp2 = p->not_dangerous();     // don't do this
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com