首页 > 解决方案 > 将带有 this 的对象传递给另一个对象

问题描述

如果我有一个Ywhich 有一个指向 的成员指针X,我该如何创建Yin的实例X

我想通过它有点像这样:

#include <memory>

struct X;
struct Y 
{    
    Y(int n, std::shared_ptr<X> x) 
        : n_(n)
        , x_(x)
    {}

    std::shared_ptr<X> x_;
    int n_;
};
    
struct X 
{
    void d()
    {
        auto y = std::make_shared<Y>(20, this);
    } 
};
    
int main()
{
    return 0;
}

标签: c++c++14shared-ptr

解决方案


这是一个可能的解决方案,使用std::enable_shared_from_this.

#include <iostream>
#include <memory>

using namespace std;

struct X;

struct Y 
{    
    Y(int n, std::shared_ptr<X> x):
    n_(n),
    x_(x)
    {
        
    }
    std::shared_ptr<X> x_;
    int n_;
};

struct X : std::enable_shared_from_this<X>
{
    void d()
    {
        auto y = make_shared<Y>(20, this->shared_from_this());
    }
    
};

int main()
{
    auto x = make_shared<X>();
    x->d();
}


推荐阅读