C++ 11非拥有引用/指向unique_ptr的指针?

nil*_*277 7 c++ pointers reference unique-ptr

这不是一个"怎么做"的问题,而是"如何正确地做到这一点"

我正在Qt中开发一个编辑器,其中不同的小部件显示子项及其(成员)变量.这些小部件中的每一个都应该包含一个指向已编辑子节点的引用/指针,以显示和更改其成员变量.

第一次尝试是旧的ANSI C方式,我学习(并且仍然有点卡住)使用简单的原始指针指向使用过的对象.它工作正常,但由于C++ 11标准支持智能指针,建议使用它们我试图使用它们.

问题是,我不太确定在这种情况下使用它们的"最佳方式"是什么...阅读智能指针后:或者谁拥有你的宝贝?哪一种指针的我时使用?还有一些我得出了不同的结论:

第一种是使用a,*unique_ptr因为编辑的对象显然是创建并删除其子对象的所有者.小部件只是指孩子显示或更改它们.问题是小部件应该如何引用孩子......

现在我只是仍然使用我用get()方法获得的原始指针,unique_ptr但这对我来说似乎有点瑕疵.我仍然可以意外调用指针上的删除并取消智能指针的好处.

第二种方法是使用a,shared_ptr因为许多对象引用子进程并对其进行编辑.在一个小部件中意外删除它也不会有害,因为它仍归其他对象所有.问题是他们拥有它.当我想从编辑过的对象中删除它时,我还必须发信号通知所有小部件,以便在它真正消失之前将其删除.(这似乎又有缺陷且容易出错)

我对两种方式都不满意.是否有一种干净的(呃)方式指向unique_ptr对象的孩子?或者我错过了一个完全不同的更好的方法来解决这个问题?

Pau*_*ans 2

您想使用 ashared_ptr代替您的unique_ptrweak_ptr's 代替您的原始指针。这将正是您所追求的。weak_ptr不会干扰编辑对象删除底层对象的能力。