如何从 "this" 对象本身 return shared_ptr 到当前对象
how to return shared_ptr to current object from inside the "this" object itself
我有一个 View 实例 class(使用 shared_ptr 在 Controller 所属对象的某处实例化)
class ViewController {
protected:
std::shared_ptr<View> view_;
};
此视图也有方法 "hitTest()" 应该 return 此视图的 shared_ptr 对外
class View {
...
public:
std::shared_ptr<UIView> hitTest(cocos2d::Vec2 point, cocos2d::Event * event) {
...
};
如何从视图内部实现此方法?应该return这个VC的shared_ptr到外面?
显然,我不能make_shared(这个)
hitTest() {
...
return make_shared<View>(this);
}
因为它会完全打破逻辑:它只会从这个原始指针创建另一个智能指针(这与所有者的 shared_ptr 完全无关)
那么视图如何从实例内部知道其外部的 shared_ptr 和 return 呢?
正如@Mohamad Elghawi 正确指出的那样,您的 class 需要派生自 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();
}
};
只是为了完整地回答这个问题,因为 link 只有答案是不受欢迎的。
我有一个 View 实例 class(使用 shared_ptr 在 Controller 所属对象的某处实例化)
class ViewController {
protected:
std::shared_ptr<View> view_;
};
此视图也有方法 "hitTest()" 应该 return 此视图的 shared_ptr 对外
class View {
...
public:
std::shared_ptr<UIView> hitTest(cocos2d::Vec2 point, cocos2d::Event * event) {
...
};
如何从视图内部实现此方法?应该return这个VC的shared_ptr到外面? 显然,我不能make_shared(这个)
hitTest() {
...
return make_shared<View>(this);
}
因为它会完全打破逻辑:它只会从这个原始指针创建另一个智能指针(这与所有者的 shared_ptr 完全无关) 那么视图如何从实例内部知道其外部的 shared_ptr 和 return 呢?
正如@Mohamad Elghawi 正确指出的那样,您的 class 需要派生自 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();
}
};
只是为了完整地回答这个问题,因为 link 只有答案是不受欢迎的。