gpt4 book ai didi

c++ - 检查调用 shared_from_this() 是否有效的方法?

转载 作者:行者123 更新时间:2023-11-30 03:42:45 25 4
gpt4 key购买 nike

我想使用 shared_from_this() 从通过引用传递的对象中获取 std::shared_ptr。但是,我希望对可能不在共享指针中或者甚至可能不是动态分配的对象保持健壮。

在调用 shared_from_this() 的潜在未定义行为之前,有没有一种方法可以检查给定对象(继承自 enable_shared_from_this 并通过引用传递)是否由共享指针管理?

最佳答案

您可以实现自己的 make_sharedshared_from_thisenable_shared_from_this,它们具有您想要的任何语义。实现您要求的语义并不困难:

  1. 该类应该持有一个 weak_ptr 到它所模板化的类的实例。

  2. make_shared 实现应该从它首先创建的 shared_ptr 初始化弱指针。

  3. shared_from_this 应该尝试锁定弱指针并在失败时返回一个空的 shared_ptr

或者,如果 weak_from_this 在您的平台上可用(这是一个 C++17 功能),您可以直接使用它。

但是,正如其他人所说,似乎很难相信这真的是解决您遇到的任何问题的最佳方法。您需要 shared_from_this 工作的情况必须与 shared_from_this 工作的情况完全一致。很难想象这样的用例。

关于c++ - 检查调用 shared_from_this() 是否有效的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com