我想使用shared_from_this()
从通过引用传递的对象中获取std::shared_ptr
。但是,我想对可能不在共享指针中或什至无法动态分配的对象保持鲁棒性。
有没有一种方法可以在调用潜在的未定义行为enable_shared_from_this
之前检查给定对象(从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
起作用的情况完全一致。很难想象是这样的用例。