我想使用 shared_from_this()
从通过引用传递的对象中获取 std::shared_ptr
。但是,我希望对可能不在共享指针中或什至可能不是动态分配的对象具有鲁棒性。
有没有办法在调用 shared_from_this() 的潜在未定义行为之前检查给定对象(继承自
?enable_shared_from_this
并通过引用传递)是否由共享指针管理
最佳答案
您可以实现自己的 make_shared
、shared_from_this
和 enable_shared_from_this
,它们具有您想要的任何语义。实现您要求的语义并不困难:
该类应包含一个指向其模板化类实例的
weak_ptr
。make_shared
实现应首先从它创建的shared_ptr
初始化弱指针。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/