首页 > 后端开发 > C++ > `enable_shared_from_this` 如何解决为 `this` 创建安全的 `shared_ptr` 问题?

`enable_shared_from_this` 如何解决为 `this` 创建安全的 `shared_ptr` 问题?

Barbara Streisand
发布: 2024-12-12 20:36:14
原创
234 人浏览过

How Does `enable_shared_from_this` Solve the Problem of Creating Safe `shared_ptr`s to `this`?

理解enable_shared_from_this的作用

enable_shared_from_this的概念常常让程序员感到困惑,文档也同样令人困惑。本文旨在通过具体示例阐明此类的用途和正确用法。

enable_shared_from_this 做什么?

enable_shared_from_this 允许您创建当您只有原始指针时,指向当前对象(“t​​his”)的shared_ptr实例。对于需要维护对象的共享所有权的某些场景,此功能至关重要。

示例:

考虑以下派生自 enable_shared_from_this< 的类 Y ;Y>:

class Y : public enable_shared_from_this<Y> {
public:
    shared_ptr<Y> f() {
        return shared_from_this();
    }
};
登录后复制

在f方法中,我们可以返回一个有效的即使该类没有任何成员实例,shared_ptr 也是如此。让我们进一步探讨一下:

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
}
登录后复制

在这个例子中,p 是指向该对象的原始shared_ptr。当我们调用p->f()时,我们获得另一个与p共享所有权的shared_ptr (q)。断言 p == q 验证它们引用同一个对象,第二个断言保证它们没有不同的值(p 和 q 必须始终保持相等的引用计数)。

重要性正确用法:

重要的是要强调,简单地使用它创建一个shared_ptr(不带enable_shared_from_this)将导致引用计数不正确。因此,使用enable_shared_from_this可以确保共享所有权的正确管理。

可用性:

enable_shared_from_this在Boost和C 11标准中都可用。您可以根据需要使用这些实现中的任何一个。

以上是`enable_shared_from_this` 如何解决为 `this` 创建安全的 `shared_ptr` 问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

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