首页 > 后端开发 > C++ > 何时以及如何在 C 中使用 `enable_shared_from_this` ?

何时以及如何在 C 中使用 `enable_shared_from_this` ?

Linda Hamilton
发布: 2024-12-13 10:00:22
原创
160 人浏览过

When and How Should You Use `enable_shared_from_this` in C  ?

理解enable_shared_from_this的意义

问题:

在探索 Boost.Asio 示例时,许多开发人员都会遇到enable_shared_from_this 概念。尽管阅读了文档,但其实际应用仍然不清楚。您能否提供一个示例并解释一下何时适合使用此类?

答案:

enable_shared_from_this 授予获得“this”有效的shared_ptr 实例的能力,甚至在只有“this”可用的情况下。如果没有此功能,要获取指向“this”的shared_ptr,则需要将其定义为成员。

请考虑 Boost 文档中的以下示例:

class Y: public enable_shared_from_this<Y> {
public:
    shared_ptr<Y> f() {
        return shared_from_this();
    }
};

int main() {
    shared_ptr<Y> p(new Y);
    shared_ptr<Y> q = p->f();
    assert(p == q);
    assert(!(p < q || q < p)); // p and q must share ownership
}
登录后复制

f() 方法返回一个有效的shared_ptr,尽管缺少成员实例。

需要注意的是,简单地返回一个shared_ptr使用“this”作为参数构造不是一种可接受的解决方案,因为它会导致与合法的“共享”引用计数不同的引用计数。因此,删除对象时,其中一个共享指针可能会出现悬空引用。

enable_shared_from_this 现在是 C 11 标准的一部分,使其可以通过 C 11 和 Boost 进行访问。

以上是何时以及如何在 C 中使用 `enable_shared_from_this` ?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板