在*现代*C++中,我应该如何管理*无主*指针?

现代C++ 中,我应该如何管理无主指针?我在想像weak_ptrfor 之类的东西unique_ptr,但这似乎不存在。

例子

例如,如果我有一个A拥有指针的类,我应该使用unique_ptr<X>而不是旧X*指针,例如

class A
{
    std::unique_ptr<X> _myX;
};

但是如果我有另一个B使用这个指针的类,我在这里做什么?使用 C 风格的指针,我会这样做:

class B
{
    X* _someX;
};

这似乎是正确的,但从代码中看不出我引用了另一个对象的指针(例如,读者可能认为我可能没有使用智能指针)。

我考虑了以下几点

  • std::shared_ptr<X>- 似乎是浪费引用计数,因为A它保证比B.
  • std::weak_ptr<X> - 仅适用于 shared_ptr
  • X& - 仅当 X& 在 B 的构造函数中可用时才有效

这似乎是一个明显的问题,如果之前有人问过,很抱歉。我环顾四周,看到了这个问题,但不幸的是,在一个特定情况下,OP 询问“是否可以使用 X*”。我正在寻找我通常应该做的事情而不是X*,(如果有的话!)。

回答

Bjarne Stroustrup 已经对此事进行了权衡。

指针非常擅长指向“事物”,而 T* 是一个非常好的符号......指针不擅长的是表示所有权并直接支持安全迭代。

他提出两个建议:

  • 考虑在现代 C++ 中T*表示“指向”的“非拥有指针T
  • 使用template<typename T> using observer_ptr = T*;如果你希望你的变量声明来明确地记录这种非所有权。

以上是在*现代*C++中,我应该如何管理*无主*指针?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>