我有一个类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_ptr类A,然后使用这两个类的一些方法。
int main()
{
auto spA = std::make_shared<B>();
auto spB = spA->getSpB();
spA.reset();
spB->func1();
}
但是,在使用 , 的方法之前B,func1()我想重置spA指针。但是spA指向的对象,还不允许被销毁(设计要求,因为指向的对象spB可以持有对某些A成员的引用)。
为了能够做到这一点,我认为B还可以持有一个指针A,让我们说A* m_A。但是由于B是从A的构造函数创建的,所以还没有A对象需要初始化m_A。
传入this的A构造函数 tocreateB(this)并不能解决问题,因为它不与spA在第一行创建的共享所有权main(),所以它不会阻止指向的对象spA在 之后被完全销毁spA.reset()。
我的另一种选择是创建m_A一个shared_ptr, 但将' 的构造函数传递给shared_from_this()要么是不可能的,因为该对象尚未创建。AcreateB(this->shared_from_this())A
你对如何解决这个问题有什么建议吗?