我想使用类似指针的对象
Ownership<Type> m_foo
拥有对象和句柄
Reference<Type> m_someFoo
作为另一个上下文中的经典“指针”,而我的 Reference 应该知道原始对象何时不再存在(例如通过返回nullptr)并且还应该可以防止原始对象从删除一小段时间(锁定)。
我知道 shared_ptr (所有权)和 weak_ptr (参考)提供了类似的功能。但是,锁定 weak_ptr 并访问原始ptr涉及创建一个相当慢的 shared_ptr 。此外,我无法在访问原始ptr之前决定不锁定 weak_ptr (例如,当知道该对象现在没有被删除时)。
实施所有权和参考是否明智如下:
std::list<Reference<Type>*>
)uint m_lockCount
m_lockCount++
,解锁m_lockCount--
m_lockCount != 0
此解决方案对于少数参考实例和参考的高访问率特别可行。
答案 0 :(得分:0)
由于使用shared_ptr/weak_ptr
作为引用的反向指针的想法,您建议的替代方法将比std::list
慢得多。如果您只在单线程模式下工作,那将是唯一的额外开销。添加线程,你需要一个锁来自动操作你的引用计数和引用列表(虽然你有一个列表,你不需要计数)。 shared_ptr\weak_ptr
会在您的对象上添加几个指针,并且在初始值之后没有动态分配。