以下是描述所有权意图的好方法(不使用 shared_ptr?)
class Z { };
class A
{
unique_ptr<Z> m_z; //want to say 'I own Z'
};
class B
{
B(A & a)
{
m_z = a._z.get();
}
Z* m_z; //want to say 'I do not own Z, just a ref...'
}
此外,B._z 可能是悬空的。有没有办法在不诉诸shared_ptr 和weak_ptr 的情况下纠正问题?
最佳答案
unique_ptr 对于所有权是可以的。如果指向该对象的原始指针仍然给出并存储在其他地方(因此它在技术上是共享的),那么这可能会使您的代码的读者感到困惑。
如果您不想使用 shared_ptr 并且不想有悬空指针,那么观察者模式可能会帮助您。使用它,您可以确保 B 类实例在其 _z 被销毁时得到信号。这可能比 A 中的 shared_ptr 和 B 中的 weak_ptr 贵一点。对于线程安全示例,请尝试 ... Boost.Signals2 。
我同意weak_ptr 的用法看起来很丑,但是观察者的东西也会给代码增加一些膨胀。
关于c++ - 用 unique_ptr 描述意图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4476419/