【发布时间】:2018-06-17 22:16:49
【问题描述】:
Owner 类通过unique_ptr 拥有Item 类的多个对象。我希望Item 的对象存储对拥有它们的Owner 对象的引用(而不是指针),并满足以下要求:
永远不能有悬空引用。
Item类的itm对象中包含的引用永远不会指向不拥有itm的Owner对象。Item对象总是有一个所有者。Item类将通过其子类使用。
我尝试在构造过程中自动注册Item 类的对象(在Item::Item() 中),但是在堆栈上创建它们时会导致双重删除。因此,我可能需要防止在堆栈上创建它们。但是当我对它们进行子类化时,这是一个问题。有没有更简单的方法来确保相互链接始终正确,而不放宽任何要求?我怀疑 3. 可能必须放宽,以便先创建对象并稍后将其注册到 Owner。
【问题讨论】:
-
我的问题有什么不清楚的地方?任何澄清建议都非常受欢迎。
-
恕我直言,如果
Items 是在堆栈上创建的,并且我认为堆栈是指它们具有自动存储功能,那么Owner并不真正拥有它们,至少在资源方面是这样。除此之外,Item中对Owner的引用似乎符合要求。 -
谢谢。因此,为了确保
Item始终归Owner所有,我必须阻止Item的自动存储? -
如果您确保只允许
Owner构造Item,并且在构造时将引用传递到Item,则应涵盖所有要点。 -
您是否确定
Item实际上需要 存储反向引用?还是可以通过您访问它的方式提供?
标签: c++ reference unique-ptr ownership-semantics