16

我有一个std::unique_ptr和另一个原始指针。我希望原始指针指向unique_ptr没有任何所有权的内容。它是只读关系:

auto bar=std::make_unique<foo>();
auto ptr=bar.get();// This may point to another value later

这很糟糕吗?有没有其他选择?

注意:真实的例子更复杂。他们不在同一个班级。

4

2 回答 2

27

不,这还不错,并且在标准库合并提议std::observer_ptr的 之前,这是表达非拥有观察者的惯用方式。

于 2016-08-11T16:38:12.933 回答
26

如果您可以保证A) bar的生命周期将超过ptr, 和B)的生命周期,并且在任何时候都不会编写任何程序员/重构delete ptr;,那么这非常好,并且对于您需要传递指针的任何情况都可能是理想的所有权。

如果不能保证这两个条件,您可能应该使用std::shared_ptrand std::weak_ptr

于 2016-08-11T16:38:31.980 回答