管理sharedPointers C ++

时间:2017-04-19 11:43:30

标签: c++ pointers smart-pointers

我正在尝试创建下图中显示的关系。 A正在创建一个B对象作为共享指针。然后它继续将共享指针传递给一堆D'。

但是当创建B时,它会创建一个C对象,该对象将从A隐藏,并且只有B知道。虽然C必须知道B才能工作。

由于共享指针已经发布到B,有没有办法将该共享指针从B的构造函数中传递给C?

当然,我可以通过将this - 指针传递给C来使其工作,并将其存储为原始指针。但是当B被摧毁时会发生什么?然后C会尝试删除B指针,但由于那已经在删除过程中,会发生什么呢?

我希望你能为我解决这个问题。

最好的问候。

enter image description here

1 个答案:

答案 0 :(得分:2)

如果我理解正确,那么B可以继承std::enable_shared_from_this,并在创建C对象时传递自己的共享指针。可能C对象应该std::weak_ptr到其“父”B对象。

如果没有弱指针,C对象的生命周期必须B对象完全管理。

另一方面,如果B对象管理C对象的生命周期,则C对象可能不需要指向B对象的共享指针,而是拥有一个指向B对象的非拥有(普通原始)指针。