父/子类所有权语义

时间:2010-12-25 17:14:32

标签: c++ c++11 class-design

我一直在构建一个带有父对象的系统,它创建了各种子对象,每个子对象都需要一个主对象才能运行。现在,到目前为止,我一直在创建shared_ptr<Parent>Child*,所以当父的创建者和所有的孩子都消失了,父​​母也去了。

但我正在重新设计我的API,以便可以在堆栈上创建Child(之前它只是堆)。现在我不确定如何处理父母,因为我不明白他们为什么不应该在他们的实际功能方面也可以在堆栈上创建 - 但是如果父被销毁然后有人试图使用会发生什么他们在堆上移动,复制或分配的孩子?我应该抛出异常吗?跳过执行操作?或者只是坚持在堆上分配父母?

2 个答案:

答案 0 :(得分:1)

这是问题句子

  

如果Parent被销毁,然后有人试图使用Child ......

如果可以,那么您拥有共享所有权,这意味着在堆上创建。

因此,要么坚持堆分配,要么放弃共享所有权语义。没有其他办法。 weak_ptr仅仅是广告共享对象的状态。

答案 1 :(得分:0)

如果你真的想做你正在宣传的广告:

  

如果Parent被销毁,然后有人试图使用Child ......

这会引起@spraff提到的问题。

实现所说内容的方法是让Child成为shared_ptr,并允许Parent之间以及尝试使用该子项的其他任何内容的共享所有权......