这不是“如何做”的问题,而是“如何以正确的方式做”
我正在 Qt 中开发一个编辑器,其中不同的小部件显示子项及其(成员)变量。这些小部件中的每一个都应包含指向已编辑子项的引用/指针,以显示和更改其成员变量。
第一次尝试是我学习的旧 ANSI C 方法(并且仍然有点卡住),它使用指向已使用对象的简单原始指针。它工作正常,但由于 C++11 标准支持智能指针并建议使用它们,我正在尝试使用它们。
问题是,我不太确定在这种情况下使用它们的“最佳方式”是什么……阅读智能指针后:或者谁拥有你的宝贝?我什么时候使用哪种指针?还有一些我得出了不同的结论:
第一种是使用 a*unique_ptr
因为被编辑的对象显然是创建并删除其子对象的所有者。小部件只是指孩子显示或更改它们。问题是小部件应该如何引用孩子......
现在我仍然只是使用我通过get()
方法获得的原始指针,unique_ptr
但这对我来说似乎有点缺陷。我仍然可以不小心在指针上调用 delete 并取消智能指针的好处。
第二种方法是使用 a shared_ptr
,因为许多对象都引用子对象并对其进行编辑。同样,在一个小部件中意外删除它也不会造成任何伤害,因为它仍然归其他对象所有。问题是他们拥有它。当我想从编辑的对象中删除它时,我还必须在它真正消失之前通知所有小部件将其删除。(这又似乎有缺陷且容易出错)
我对这两种方式都不太满意。是否有一种干净(er)的方式来指向对象的unique_ptr
子对象?还是我错过了解决此问题的完全不同且更好的方法?