我正在尝试创建下图中显示的关系。 A正在创建一个B对象作为共享指针。然后它继续将共享指针传递给一堆D'。
但是当创建B时,它会创建一个C对象,该对象将从A隐藏,并且只有B知道。虽然C必须知道B才能工作。
由于共享指针已经发布到B,有没有办法将该共享指针从B的构造函数中传递给C?
当然,我可以通过将this
- 指针传递给C来使其工作,并将其存储为原始指针。但是当B被摧毁时会发生什么?然后C会尝试删除B指针,但由于那已经在删除过程中,会发生什么呢?
我希望你能为我解决这个问题。
最好的问候。
答案 0 :(得分:2)
如果我理解正确,那么B
可以继承std::enable_shared_from_this
,并在创建C
对象时传递自己的共享指针。可能C
对象应该std::weak_ptr
到其“父”B
对象。
如果没有弱指针,C
对象的生命周期必须由B
对象完全管理。
另一方面,如果B
对象管理C
对象的生命周期,则C
对象可能不需要指向B
对象的共享指针,而是拥有一个指向B
对象的非拥有(普通原始)指针。