如何从"this"对象本身内部将shared_ptr返回到当前对象

how to return shared_ptr to current object from inside the "this" object itself

本文关键字:对象 返回 ptr shared 内部 this      更新时间:2023-10-16

我有一个视图类的实例(使用 shared_ptr 在控制器拥有对象的某个地方实例化)

class ViewController {
protected:
    std::shared_ptr<View> view_;
};

此视图还具有方法"hitTest()",该方法应将此视图的shared_ptr返回给外部世界

class View {
...
public:
std::shared_ptr<UIView> hitTest(cocos2d::Vec2 point, cocos2d::Event * event) {
...
};

如何从视图内部实现此方法?它应该把这个VC的shared_ptr还给外面吗?显然,我不能make_shared(这个)

hitTest() {
...
    return make_shared<View>(this);
}

因为它会完全破坏逻辑:它只会从这个原始指针创建另一个智能指针(这与所有者的shared_ptr完全无关)那么视图如何知道其外部shared_ptr并从实例内部返回它呢?

正如

@Mohamad Elghawi正确指出的那样,您的类需要从std::enable_shared_from_this派生。

#include <memory>
struct Shared : public std::enable_shared_from_this<Shared>
{
     std::shared_ptr<Shared> getPtr()
     {
         return shared_from_this();
     }
 };

只是为了完全回答这个问题,因为只有链接的答案是不受欢迎的。