我有一个类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()
要么是不可能的,因为该对象尚未创建。A
createB(this->shared_from_this())
A
你对如何解决这个问题有什么建议吗?