0

我有一个类A,它有一个指向类的成员指针B

class A 
{
public: 
    A() 
    {
        m_b = createB();
    }
    std::shared<B> getSpB()
    {
        return m_b;
    }
private:
    std::shared<B> m_b;
};

class B 
{
public: 
    B() {}

    static std::shared_ptr<B> createB()
    {
        return std::make_shared<B>();
    }
    void func1() {/* ... */ }

private:
};

在我的main函数中,我创建了一个shared_ptrA,然后使用这两个类的一些方法。

int main() 
{
    auto spA = std::make_shared<B>();
    auto spB = spA->getSpB();

    spA.reset();
    spB->func1();
}

但是,在使用 , 的方法之前Bfunc1()我想重置spA指针。但是spA指向的对象,还不允许被销毁(设计要求,因为指向的对象spB可以持有对某些A成员的引用)。

为了能够做到这一点,我认为B还可以持有一个指针A,让我们说A* m_A。但是由于B是从A的构造函数创建的,所以还没有A对象需要初始化m_A

传入thisA构造函数 tocreateB(this)并不能解决问题,因为它不与spA在第一行创建的共享所有权main(),所以它不会阻止指向的对象spA在 之后被完全销毁spA.reset()

我的另一种选择是创建m_A一个shared_ptr, 但将' 的构造函数传递给shared_from_this()要么是不可能的,因为该对象尚未创建。AcreateB(this->shared_from_this())A

你对如何解决这个问题有什么建议吗?

4

0 回答 0